Promise.All 中长期承诺链接的最佳实践是什么
What is the best practice for long promise chainings within Promise.All
假设我有几个主要的承诺,其中一些 return 承诺在里面。我想从我想到 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')
})
})
}
上段代码,2个主要承诺是promise1
和promise3
。 promise2
将由 promise3
编辑 return。我正在证明 promise3
是一个长期的承诺改变。为了运行,我初始化了
promise = [promise1(), promise3()];
Promise.all(promise).then(function(data){
console.log('done', data);
})
结果是
promise1
promise2
promise3
done [ 'promise1', 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");
}));
});
然后你的问题是:"why is the resolved value of a
not equal to b
?"。好吧,它们是两个不同的承诺。
与return a
你return原来promise2
。在 a.then
你最终 return promise3
.
假设我有几个主要的承诺,其中一些 return 承诺在里面。我想从我想到 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')
})
})
}
上段代码,2个主要承诺是promise1
和promise3
。 promise2
将由 promise3
编辑 return。我正在证明 promise3
是一个长期的承诺改变。为了运行,我初始化了
promise = [promise1(), promise3()];
Promise.all(promise).then(function(data){
console.log('done', data);
})
结果是
promise1
promise2
promise3
done [ 'promise1', 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");
}));
});
然后你的问题是:"why is the resolved value of a
not equal to b
?"。好吧,它们是两个不同的承诺。
与return a
你return原来promise2
。在 a.then
你最终 return promise3
.