Javascript 使用q.js,q.all是否执行即时函数?
使用q.all时,数组中的即时函数似乎没有执行。每个函数都应该创建一个已解析的承诺,将其打印到控制台,然后返回。我没有看到控制台输出,但Q.all似乎很满意,并用2个空值触发“then”。这个怎么了?谢谢Javascript 使用q.js,q.all是否执行即时函数?,javascript,asynchronous,q,Javascript,Asynchronous,Q,使用q.all时,数组中的即时函数似乎没有执行。每个函数都应该创建一个已解析的承诺,将其打印到控制台,然后返回。我没有看到控制台输出,但Q.all似乎很满意,并用2个空值触发“then”。这个怎么了?谢谢 var Q = require("q"); var p = Q('Q'); console.log('hi p='+ JSON.stringify(p.inspect())); return Q.all([ function(){ var a = Q('A');
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));
}
)
对于q.all,数组中的立即数函数似乎没有执行
对。不期望一系列函数,而是一系列承诺
你应该自己执行这些承诺,Q.所有人都不需要(不应该)知道承诺来自哪里。它们可能不是每次都在运行中创建的,有些应用程序使用很久以前创建的承诺
但是Q.all
似乎很满意,并用2个空值触发“then”
不完全是Q.all
不仅接受该数组中的承诺,还接受自动包装在承诺中的任意值。这意味着您的代码等于将两个用函数解析的承诺作为其结果值,然后在r
数组中传递给回调函数。产生空值的是JSON.stringify()
,它们实际上是函数。改为执行console.log('A和B完成了',r)
。据我所知所有
都应该得到一系列承诺,而不是函数。