拒绝JavaScript承诺

我想拒绝我没有建立的承诺。也就是说,我阅读的示例描述了类似的内容:

const sample = new Promise((resolve,reject) => {
    setTimeout(() => {
        reject('fail promise');
    },1000);
});

在1秒后拒绝sample。就我而言,我想拒绝的诺言是通过外部api调用来实现的,所以我不能以这种方式拒绝。

我已阅读的另一种方法显示了如何将诺言与其他使用setTimeout拒绝新诺言的包裹。像这样:

const timeout = new Promise(function(resolve,reject) {
    setTimeout(resolve,1000,'one');
});

const sample = new Promise(function(resolve,5000,'two');
});

return Promise.race([sample,timeout]);

在1s返回另一个诺言之后,该力“拒绝” sample。这可以用来设置超时时间,但实际上它不会拒绝sample,只会返回另一个诺言,并且原始请求会继续运行,直到拒绝或解决自己。

我找不到没有图书馆怎么能正确拒绝诺言

wwchwoeoprpr 回答:拒绝JavaScript承诺

您为什么需要拒绝他们的承诺?您关心的是为您的代码获取有用的结果,因此编写可获取结果的代码。

以您自己的承诺包装API调用,对您的承诺进行超时拒绝,如果该API在超时之前产生结果,则传递resolve

const attempt = new Promise( (resolve,reject) => {
  // run the actual API _and_ your rejection timeout concurrently:
  let rejected = false;

  const id = setTimeout(() => {
    rejected = true;
    reject(new Error('timeout');
  }),1000);

  actualApiCall(some,input,args,here)
    .then(result => {
      if (rejected) return; // <- if we rejected via timeout,we no longer care.
      clearTimeout(id);     // <- always remember to properly clean up
      resolve(result);
     })
    .catch(e => {
      if (rejected) return;
      clearTimeout(id);
      reject(e)
    });
});

attempt
  .then(result => doSomethingWith(result))
  .catch(e => console.log('rejected:',e));
,

我找不到没有图书馆怎么能正确拒绝诺言

首先,即使您可以执行以下操作,这对我来说也不是一个好方法,

const apiPromise = externalApi();

现在apiPromise可以处于resolvedrejected状态。在这两种情况下,您都可以抛出类似

的错误
const rejectedPromise = apiPromise.then(
  (fulfilledValue) => { throw "error" },(rejetedValue) => { throw "error" }
);
rejectedPromise.catch(err => console.log(err)); //logs "error"

详细了解Promise.then()

本文链接:https://www.f2er.com/2751025.html

大家都在问