Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要jQuery';s";什么时候;mpromise/mongoose的功能_Javascript_Deferred_Deferred Execution - Fatal编程技术网

Javascript 需要jQuery';s";什么时候;mpromise/mongoose的功能

Javascript 需要jQuery';s";什么时候;mpromise/mongoose的功能,javascript,deferred,deferred-execution,Javascript,Deferred,Deferred Execution,mpromise/mongoose是否有when子句?我想做点什么,不用为mpromise编写自己的包装 $.when(jQueryPromise1,jQueryPromise3,jQueryPromise3).done(function(r1,r2,r3) { // success code }.fail(function(err1,err2,err3) { //failure code }); 我意识到锁链的存在,这不是我想要的。我在mpromise/mongoose中寻找

mpromise/mongoose是否有when子句?我想做点什么,不用为mpromise编写自己的包装

$.when(jQueryPromise1,jQueryPromise3,jQueryPromise3).done(function(r1,r2,r3) {
    // success code
}.fail(function(err1,err2,err3) {
    //failure code
});

我意识到锁链的存在,这不是我想要的。我在mpromise/mongoose中寻找一种机制,它将在所有承诺完成后执行。

以下是一个示例实现:

function when(/* promise list */) {
    var promises = [].slice.call(arguments),
        whenPromise = new Promise,
        results = new Array(promises.length),
        remaining = promises.length,
        done = false,
        finish = function() {
            done = true;
        };

    whenPromise.onFulfill(finish).onReject(finish);

    promises.forEach(function(promise) {
        promise.onFulfill(function(result) {
            if (!done) {
                // index of result should correspond to original index of promise
                results[promises.indexOf(promise)] = result;
                if (--remaining == 0) {
                    // fulfill when all are fulfilled
                    whenPromise.fulfill.apply(whenPromise, results);
                }
            }
        }).onReject(function(err) {
            if (!done) {
                // reject when one is rejected (a la jQuery)
                whenPromise.reject(err);
            }
        });
    });
}

你能解释一下为什么链锁不是你想要的吗?我对这个图书馆不熟悉;链接是否会导致承诺按顺序解析而不是在准备就绪时解析?是的,链接会导致承诺按顺序解析,而我需要它们并行解析。我的应用程序在执行下一个承诺之前不需要一个承诺的答案,但我需要在执行结束时立即执行所有结果。我希望有一个本机解决方案,但我没有找到。我不得不写我自己的,但由于你的也很有效,这里有一些要点。谢谢,如果你想分享我已经使用过的利用它的软件包,我很想看看你的解决方案,所以它利用JQDeferred在何时实现。功能上的主要区别在于我可以传递一个数组,或者一个参数列表作为承诺列表,但这并不是什么新奇的事情,我只是经常需要传递承诺的动态数组。