Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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 在Chrome中使用本机实现处理并行承诺_Javascript_Google Chrome_Asynchronous - Fatal编程技术网

Javascript 在Chrome中使用本机实现处理并行承诺

Javascript 在Chrome中使用本机实现处理并行承诺,javascript,google-chrome,asynchronous,Javascript,Google Chrome,Asynchronous,Chrome(至少是我正在使用的beta版)现在已经在本地JavaScript中实现了承诺,并且,基于一些实验,它工作正常。有很多关于“then”和“catch”方法的文档,我能够将承诺链接在一起,这样,当一个承诺实现时,下一个承诺就会等待 然而,我想知道如何并行地等待承诺,在承诺全部实现或拒绝时调用回调函数。在这种情况下,所有结果和原因也必须可用,可能是在一个数组中 在转储JavaScript对象(“Promise”)时,我看到一个方法“all”,但我找不到它的文档 有人能提供这方面的信息吗

Chrome(至少是我正在使用的beta版)现在已经在本地JavaScript中实现了承诺,并且,基于一些实验,它工作正常。有很多关于“then”和“catch”方法的文档,我能够将承诺链接在一起,这样,当一个承诺实现时,下一个承诺就会等待

然而,我想知道如何并行地等待承诺,在承诺全部实现或拒绝时调用回调函数。在这种情况下,所有结果和原因也必须可用,可能是在一个数组中

在转储JavaScript对象(“Promise”)时,我看到一个方法“all”,但我找不到它的文档

有人能提供这方面的信息吗

我还实现了自己的实验并行机制,如下所示:

function async1_promise() {
    return new Promise(
        function(resolve, reject) {
            async_call1(
                function () {
                    resolve("async_call1 worked!");
                }
            );
        }
    );
}

function async2_promise() {
    return new Promise(
        function(resolve, reject) {
            async_call2(
                function () {
                    resolve("async_call2 worked!");
                }
            );
        }
    );
}

function async3_promise() {
    return new Promise(
        function(resolve, reject) {
            async_call3(
                function () {
                    resolve("async_call3 worked!");
                }
            );
        }
    );
}

parallel([async1_promise(), async2_promise(), async3_promise()],
    function (promises, results) {
        console.log('all done', promises, results);
    }
);

function parallel(promises, callback) {
    var results = [];
    promises.forEach(
        function (val, key, array) {
            val.then(
                function (result) {
                    results[key] = {
                        success: true,
                        result: result
                    };
                    if (results.length == promises.length)
                        callback(promises, results);
                },
                function (reason) {
                    results[key] = {
                        success: false,
                        result: reason
                    };
                    if (results.length == promises.length)
                        callback(promises, results);
                }
            );
        }
    );
}

欢迎对我处理并行承诺的尝试发表评论。

Promise.all
接受一系列承诺实例,只有在它们全部解决或一个被拒绝后才会继续

一旦所有承诺得到解决,它将按照传递给
Promise.all
的相同顺序为您提供一个结果数组,以便您可以访问所有响应, 或者遇到的第一个拒绝将触发捕获

使用您的示例,以下内容可以替代您的
并行
功能:

Promise.all([async1_promise(), async2_promise(), async3_promise()])
    .then(function(results) {
        // results = ["async_call1 worked!", "async_call2 worked!", "async_call3 worked!"]          
    })
    .catch(err) {
        // error handling
        // only called once for the first reject encountered
    });
有用的链接

  • -ES6承诺规范
  • -请参见
    PromiseAll
    ,了解实施情况
  • -非Chrome,但使用相同规格,并有使用示例
  • -包含有关使用
    的部分。所有

谢谢!是否在任何地方记录了上述内容?你是从源代码中得到的吗?您还可以提供其他参考吗?我已经添加了一些到规范、源代码和用法示例的链接Hanks!非常有帮助的回答。是否
。all
并行处理?all接受iterable作为参数,因此它将迭代内容,而不是神奇地并行处理:-)