在promise . all中实现长承诺链的最佳实践是什么?
What is the best practice for long promise chainings within Promise.All
假设我有几个主要的promise,其中一些在内部返回promise。我想从承诺函数中检索结果这就是为什么我考虑Promise.all
。首先,让我们看一下下面的示例代码
var Promise = require('bluebird');
promise = []
function promise1(){
return new Promise(function(resolve, reject){
console.log('promise1');
resolve('promise1');
});
}
function promise2(){
return new Promise(function(resolve, reject) {
console.log('promise2');
resolve('promise2');
});
}
function promise3(){
promise2().then(function(){
return new Promise(function(resolve, reject) {
console.log('promise3');
resolve('promise3')
})
})
}
上面一段代码,两个主要承诺是promise1
和promise3
。promise2
将由promise3
返回。我证明promise3
是一个长期的承诺变化。为了运行,我初始化了
promise = [promise1(), promise3()];
Promise.all(promise).then(function(data){
console.log('done', data);
})
结果
promise1
promise2
promise3
done ['promise ', undefined]
但我期待
done ['promise1', 'promise3']
我的问题是这种情况下的最佳实践是什么?
promise3
缺少一个return
。有了这个,它就像预期的那样工作了。
function promise3(){
return promise2().then(function(){
// ^^^ missing return here
return new Promise(function(resolve, reject) {
console.log('promise3');
resolve('promise3')
})
})
}
更新:
如果你简化你的情况,你在做:
var a = new Promise(function(resolve) {
resolve("a");
});
var b = a.then(function () {
return new Promise(function(resolve) {
resolve("b");
}));
});
然后你的问题是:"为什么a
的解析值不等于b
?"。这是两种不同的承诺。
对于return a
,您返回原始的promise2
。在a.then
中,最终返回promise3
。
相关文章:
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 在node.js中编写单元测试的最佳方式是什么
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 在AngularJS中使用多个主题的最佳方式是什么
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用JavaScript随机给网页上的每个字母上色的最佳方式是什么
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- addEvent()传奇事件之后的当前最佳实践是什么