我必须将诺言嵌套在诺言中,这还好,还是被认为是不好的做法?
我有一个具有方法fetchArticles
,fetchImages
和main
的类。main
是调用fetchArticles
+ fetchImages
的那个fetchArticles
从另一个文件运行一个函数,该函数返回一个Promise,但我也在fetchArticles
类方法本身上返回一个Promise,因此,当它获取文章时,它将继续获取图像。fetchImages
方法不是被允许的,而是从另一个文件中调用一个被承诺的函数。
我不确定这是否是实现并行效果的最佳方法?
main () {
// Call the promised fetchArticles class method
this.fetchArticles()
.then ( () => this.fetchImages( () => {
this.res.json(this.articles.data);
}));
}
fetchArticles () {
return new Promise ((fullfil, rej) => {
// Calling a promised function which simply returns an array of articles
fetchArticles (this.parametersForApiCall)
.then ( (data) => {
this.articles.data = data;
this.articles.imageIds = [1,5,2,8,99,1000,22,44,55,120,241]; // Extract image IDS and save to class this
fullfil();
})
.catch ( (err) => {
console.log ("Something went wrong with api call", err);
res.json({error: "Something went wrong", code: 1011});
reject();
});
});
}
fetchImages (cb) {
// Calling a promised function which simply returns an array of images
fetchImages (this.imageIds).then( (imgs) => {
this.images = imgs;
cb (); // Temp callback method
}).catch ( (err) => {
console.log (err, "error finding images in then")
})
}
}
我应该使用异步并行之类的东西吗?注意我暂时在
callback
方法中添加了fetchImages
,直到找到一个很好的解决方案来实现诺言。 最佳答案
一些注意事项:
您在fetchArticles
函数中创建了不必要的承诺。您可以直接返回承诺的fetchArticles的结果。
使用Promise.all将使您同时启动两个项目。如果您的两个方法互不依赖,那么这是一个不错的方法。我已经用该代码更新了main
函数。
同样,您可以直接在fetchImages
函数中返回promise。因为这也是正确的,所以您不再需要回调。我已经删除了
结果代码
main () {
// Call the promised fetchArticles and fetchImages class methods
Promise.all([this.fetchArticles(), this.fetchImages()])
.then(() => this.res.json(this.articles.data));
}
fetchArticles () {
// Calling a promised function which simply returns an array of articles
return fetchArticles (this.parametersForApiCall)
.then ( (data) => {
this.articles.data = data;
this.articles.imageIds = [1,5,2,8,99,1000,22,44,55,120,241]; // Extract image IDS and save to class this
})
.catch ( (err) => {
console.log ("Something went wrong with api call", err);
res.json({error: "Something went wrong", code: 1011});
reject();
});
}
fetchImages () {
// Calling a promised function which simply returns an array of images
return fetchImages (this.imageIds).then( (imgs) => {
this.images = imgs;
}).catch ( (err) => {
console.log (err, "error finding images in then")
})
}
}
关于javascript - 嵌套 promise 会产生并行效果吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37151089/