是否可以链接.all()而不是使用Promise.all()?
问题描述:
我正在使用蓝鸟承诺在Node.js中工作。我想在我的承诺连锁使用Promise.all,并试图这样:是否可以链接.all()而不是使用Promise.all()?
request-promise(some_API_call)
.then((responseBody) => {
// using responseBody to determine N new API calls to make
var arrayPromises = [];
for (var i=0 ; i<N ; i++) {
var newPromise = request-promise(new_API_call_i);
arrayPromises.push(newPromise);
}
return(arrayPromises);
})
.all(arrayPromises)
.then((arrayResults) => {
// do something
});
引发我一个错误:arrayPromises is undefined
。
我能想到的唯一的另一种方法是:
request-promise(some_API_call)
.then((responseBody) => {
// using responseBody to determine N new API calls to make
var arrayPromises = [];
for (var i=0 ; i<N ; i++) {
var newPromise = request-promise(new_API_call_i);
arrayPromises.push(newPromise);
}
Promise.all(arrayPromises)
.then((arrayResults) => {
// do something
});
})
不知:
- 所有这些模式是正确的?
- 我不会一次又一次地在另一个反模式中下降:在此背景下嵌套承诺链是否正确?
答
arrayPromises
未定义,因为它是在回调范围内定义的,以下then
无权访问。我想你会想从你的初始then
返回Promise.all
并继续从那里的链:
request-promise(some_API_call)
.then((responseBody) => {
// using responseBody to determine N new API calls to make
var arrayPromises = [];
for (var i=0 ; i<N ; i++) {
var newPromise = request-promise(new_API_call_i);
arrayPromises.push(newPromise);
}
return Promise.all(arrayPromises);
})
.then((arrayResults) => {
// do something
});
可爱。我的两个想法同时写得很简单,同时保持代码平坦。为什么我无法想象这首先是T_T。谢谢 ! –
对我来说,解决别人问题的办法总是比解决我自己的问题更为明确:P很高兴帮助! –