es6-promise - 我怎样才能让 Promise.all 等待每一个承诺?
问题描述
我有代码:
const testPromise = (stepNumber) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Done with step ' + stepNumber);
resolve()
}, 1000);
});
}
const testPromiseAll = () => {
return Promise.all([
[1, 2, 3].map(number => {
return testPromise(number);
})
]);
}
testPromiseAll().then(() => {
console.log('Done with all!');
});
在里面的所有承诺都解决之后,应该立即出现“全部完成”的消息.all
……或者我是这么想的。阅读规范以及本文:
https://dev.to/dance2die/promise-race-vs-promise-any-and-promise-all-vs-promise-allsettled-26if
似乎应该是这样,但事实并非如此。
如果内部的所有承诺都已解决,我希望Promise.all
解决,同样,如果内部的任何承诺都被拒绝,则整个链都应该失败。
我能做些什么?
解决方案
你需要改变:
const testPromiseAll = () => {
return Promise.all([
[1, 2, 3].map(number => {
return testPromise(number);
})
]);
}
到:
const testPromiseAll = () => {
return Promise.all(
[1, 2, 3].map(number => {
return testPromise(number);
})
);
}
您的代码将列表列表传递给Promise.all
立即解析的函数。
推荐阅读
- javascript - 验证日期输入 - 时间戳微服务
- mysql - 这有什么问题?
- dialogflow-es - Dialogflow 中的 Google 助理测验操作
- python - 如何在条件下用另一个 col 值替换一个 col 值
- reactjs - 有没有更好的方法将数据从子组件传递到父组件中的函数而不使用 bind()?
- docker - 如何在配置自定义映像时将文件夹从 docker 复制到主机
- python - 用空格替换 \n
- cryptography - 将密码转换为 256 位密钥
- angular - 如何添加字典
类型从角度到 webapi 方法 - html - 带有显示的 div 内的分页符:表在 Firefox 中不起作用