Promise.all已解决的问题。意外的收益

编程入门 行业动态 更新时间:2024-10-06 06:48:33

Promise.all已解决的问题。意外的<a href=https://www.elefans.com/category/jswz/34/1768171.html style=收益"/>

Promise.all已解决的问题。意外的收益

这是我的代码:

const Promise = require("bluebird");

const getRandomDelay = maxDelay => {
  return Math.floor(Math.random() * maxDelay) * 1000;
};

const getAsyncNumbers = () => {
  const successDelay = getRandomDelay(1);
  const errorDelay = getRandomDelay(3);  

  return new Promise((resolve, reject) => {
    setTimeout(() => resolve([1, 3, 5, 6, 4, 2]), successDelay);

    setTimeout(() => reject(new Error("No numbers found :(")), errorDelay);
  });
};

Promise.allSettled([getAsyncNumbers(), getAsyncNumbers(), getAsyncNumbers()])
  .then(results => {
    results.forEach((result) => console.log(result.status))
  })
  .catch(err => {
    console.log(`${err} Proces zakończony!`);
  });

我希望控制台返回类似已完成或被拒绝的内容,但是我收到了:未定义未定义未定义

...

我检查了结果并收到了:

PromiseInspection {_bitField:33554432,_settledValueField:[1,3,5,6,4,2]}PromiseInspection {_bitField:33554432,_settledValueField:[1,3,5,6,4,2]}PromiseInspection {_bitField:33554432,_settledValueField:[1,3,5,6,4,2]}

也许这里有人可以帮助我吗?谢谢高级:)

回答如下:

我也遇到了同样的问题。我将其追溯到Webpack随附的最新版本的Bluebird(截至撰写本文时),该版本正在处理代码转换。首先,我编写了一个包装器,以完成将值转换为期望的值:

const IS_FULFILLED = 0x2000000
const IS_REJECTED = 0x1000000
const STATUS_MAP = {
  [IS_FULFILLED]: { status: 'fulfilled' },
  [IS_REJECTED]: { status: 'rejected' },
}

const transformAllSettled = (results) =>
 results.map(({ _bitField, _settledValueField, ...rest }) =>
    _bitField ? { ...STATUS_MAP[_bitField], value: _settledValueField } : rest,
  )

...

return Promise.allSettled(myPromises).then(transformAllSettled)

如果将来解决了问题,则可以通过响应进行传递。但是,我最终选择了不依赖于ECMAScript草案版本中仍不支持的功能的逻辑。

const gracefulFail = (promise) => promise.catch((error) => ({ error }))
const withoutRejected = (responses) => responses.filter(item => !item.error)

return Promise.all(myPromises.map(gracefulFail)).then(withoutRejected)

这将允许所有的诺言得以解决,而不会有一个或多个拒绝使整个诺言失败,仅返回那些未被拒绝的回答。当然,您可以按照自己喜欢的任何方式处理拒绝。

希望这会有所帮助!

更多推荐

Promise.all已解决的问题。意外的收益

本文发布于:2024-05-07 11:45:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756094.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:收益   意外   Promise

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!