使用q.all,我的数组中的直接函数似乎没有执行。这些函数应该创建一个已解决的promise,将其打印到控制台,然后返回它。我没有看到控制台输出,但Q.all看起来很满意并且触发了'then'并且有2个空值。这有什么问题?谢谢!
var Q = require("q");
var p = Q('Q');
console.log('hi p='+ JSON.stringify(p.inspect()));
return Q.all([
function(){
var a = Q('A');
console.log('thing A: '+JSON.stringify(a.inspect()));
return a;
},
function(){
var b= Q('B');
console.log('thing B: '+JSON.stringify(b.inspect()));
return b;
}
]).then(
function(r){
console.log('A and B are done: '+JSON.stringify(r));
}
)
答案 0 :(得分:2)
使用q.all,似乎我的数组中的直接函数没有执行
是。 Q.all
不期望一系列函数,而是承诺数组!
你应该自己执行它们,Q.all
不需要(不应该)知道 promises 的来源。它们可能不会每次都在动态创建,有些应用程序使用很久以前创建的承诺。
但
Q.all
似乎感到满意并触发了'然后'有2个空值
不完全是。 Q.all
不仅接受该数组中的promise,还接受任意值,这些值自动包含在promises中。这意味着您的代码等于将两个使用函数解析的promise作为结果值,然后将r
数组传递给您的回调。它的JSON.stringify()
产生空值,它们实际上起作用。请改为console.log('A and B are done', r)
。