Javascript 如何将承诺转换为承诺。all()。所有的人都要回报一个承诺
我的问题很简单。Javascript 如何将承诺转换为承诺。all()。所有的人都要回报一个承诺,javascript,node.js,promise,Javascript,Node.js,Promise,我的问题很简单。Promise.all()方法可以返回一个Promise? 让我解释一下: function simpleFunction() { let queue = []; queue.push(*PROMISE1*); queue.push(*PROMISE1*); queue.push(*PROMISE1*); Promise.all(queue) .then(() => return Promise.resolve())
Promise.all()
方法可以返回一个Promise
?
让我解释一下:
function simpleFunction() {
let queue = [];
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
Promise.all(queue)
.then(() => return Promise.resolve())
.catch(err => {
return Promise.reject(err);
});
}
使用此函数,如果队列
的承诺
被拒绝,我想拒绝一个错误。
实际上,我有一个“未处理的拒绝”错误,我想就是因为这个。所以,我在尝试别的东西
async function simpleFunction() {
let queue = [];
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
try {
await Promise.all(queue);
return Promise.resolve();
} catch (error) {
return Promise.reject(err);
}
在这次改变之后,我又遇到了这个问题,但我认为第二种方法是正确的,但我不知道为什么它不起作用
谢谢您的时间。问题在于您的
return Promise.reject(err);
在这两个片段中。这会导致整个事情都要解决的拒绝承诺,如果拒绝在任何地方都没有得到处理,您将收到“未处理的拒绝”警告
如果simpleFunction
的使用者需要使用承诺,请确保它也捕获了承诺,并确保返回承诺。所有调用
无需包装承诺。所有
调用。然后
和捕获
,您只需返回承诺。所有
本身。这将产生一个承诺,如果数组中的任何承诺被拒绝,该承诺将被拒绝,这就是您想要的:
function simpleFunction() {
let queue = [];
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
return Promise.all(queue);
}
simpleFunction()
.catch((err) => {
// handle errors
});
或者,如果消费者不使用承诺,则在simpleFunction
中使用.catch
,但不要创建被拒绝的承诺,只需处理错误(或在catch
中忽略它,尽管这不是一个好主意):
所有这些都是不必要的,只需返回promote.All
returns.So。当队列
中的所有承诺结束时,promise.all()
返回一个完整的字段语句?完成了,你的意思是?是,Promise.all
将返回一个Promise,该Promise在数组中解析一次(如果)所有Promise。如果数组中的任何承诺被拒绝,则Promise.all也会被拒绝。
function simpleFunction() {
let queue = [];
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
Promise.all(queue)
.catch((err) => {
// handle errors here
// do NOT call `Promise.reject`,
// because then the rejection will be unhandled
});
}