首页 文章

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

提问于
浏览
0

使用q.all,似乎我的数组中的直接函数没有执行 . 这些函数应该创建一个已解决的promise,将其打印到控制台,然后返回它 . 我没有看到控制台输出,但是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));
    }
)

1 回答

  • 2

    使用q.all,似乎我的数组中的直接函数没有执行

    是 . Q.all不期望一系列函数,而是一组承诺!

    你应该自己执行它们, Q.all 不需要(不应该)知道承诺的来源 . 它们可能不是每次都在动态创建的,有些应用程序使用很久以前创建的promises .

    但是Q.all看起来很满意并且用2个空值触发'then'

    不完全是 . Q.all 不仅接受该数组中的promise,还接受任意值,这些值自动包含在promises中 . 这意味着你的代码等于将两个使用函数解析的promise作为结果值,然后在 r 数组中传递给你的回调 . 它是 JSON.stringify() 产生空值,它们实际上是函数 . 请改为 console.log('A and B are done', r) .

相关问题