Javascript 使用q.js,q.all是否执行即时函数?

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');

使用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');
        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)

据我所知
所有
都应该得到一系列承诺,而不是函数。