使用q.js,q.all执行立即函数吗?

时间:2014-07-29 21:10:01

标签: javascript asynchronous q

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

1 个答案:

答案 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)