Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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 如何将承诺转换为承诺。all()。所有的人都要回报一个承诺_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 如何将承诺转换为承诺。all()。所有的人都要回报一个承诺

Javascript 如何将承诺转换为承诺。all()。所有的人都要回报一个承诺,javascript,node.js,promise,Javascript,Node.js,Promise,我的问题很简单。Promise.all()方法可以返回一个Promise? 让我解释一下: function simpleFunction() { let queue = []; queue.push(*PROMISE1*); queue.push(*PROMISE1*); queue.push(*PROMISE1*); Promise.all(queue) .then(() => return Promise.resolve())

我的问题很简单。
Promise.all()
方法可以返回一个
Promise
? 让我解释一下:

function simpleFunction() {
    let queue = [];
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);

    Promise.all(queue)
        .then(() => return Promise.resolve())
        .catch(err => {
            return Promise.reject(err);
        });    
}
使用此函数,如果
队列
承诺
被拒绝,我想拒绝一个错误。 实际上,我有一个“未处理的拒绝”错误,我想就是因为这个。所以,我在尝试别的东西

async function simpleFunction() {
    let queue = [];
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);

    try {
        await Promise.all(queue);
        return Promise.resolve();
    } catch (error) {
        return Promise.reject(err);
    }  
在这次改变之后,我又遇到了这个问题,但我认为第二种方法是正确的,但我不知道为什么它不起作用

谢谢您的时间。

问题在于您的

return Promise.reject(err);
在这两个片段中。这会导致整个事情都要解决的拒绝承诺,如果拒绝在任何地方都没有得到处理,您将收到“未处理的拒绝”警告

如果
simpleFunction
的使用者需要使用承诺,请确保它也捕获了承诺,并确保
返回
承诺。所有
调用

无需包装
承诺。所有
调用
。然后
捕获
,您只需返回
承诺。所有
本身。这将产生一个承诺,如果数组中的任何承诺被拒绝,该承诺将被拒绝,这就是您想要的:

function simpleFunction() {
    let queue = [];
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);

    return Promise.all(queue);
}
simpleFunction()
  .catch((err) => {
    // handle errors
  });
或者,如果消费者不使用承诺,则在
simpleFunction
中使用
.catch
,但不要创建被拒绝的承诺,只需处理错误(或在
catch
中忽略它,尽管这不是一个好主意):


所有这些都是不必要的,只需返回
promote.All
returns.So。当
队列
中的所有承诺结束时,
promise.all()
返回一个完整的字段语句?完成了,你的意思是?是,
Promise.all
将返回一个Promise,该Promise在数组中解析一次(如果)所有Promise。如果数组中的任何承诺被拒绝,则
Promise.all也会被拒绝。
function simpleFunction() {
    let queue = [];
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);

    Promise.all(queue)
      .catch((err) => {
        // handle errors here
        // do NOT call `Promise.reject`,
        // because then the rejection will be unhandled
      });
}