Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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 并行承诺的自定义错误处理_Javascript - Fatal编程技术网

Javascript 并行承诺的自定义错误处理

Javascript 并行承诺的自定义错误处理,javascript,Javascript,我有一套承诺,我想通过Promise.all并行执行。我还希望通过以下方式忽略错误(如果有): Promise.all(promises.map(p=>p.catch(()=>undefined)) 我试图理解返回undefined在这里有什么帮助(我可以返回错误吗?)。如果我想要一些基于状态代码的定制逻辑,是否需要以下工作 Promise.all(promises.map(p => p.catch(error => { if (error.statusCode === 40

我有一套承诺,我想通过
Promise.all
并行执行。我还希望通过以下方式忽略错误(如果有):

Promise.all(promises.map(p=>p.catch(()=>undefined))

我试图理解返回
undefined
在这里有什么帮助(我可以返回错误吗?)。如果我想要一些基于状态代码的定制逻辑,是否需要以下工作

Promise.all(promises.map(p => p.catch(error => {
    if (error.statusCode === 400) return error;
    throw error;
})));
我只想忽略那些状态代码为400的错误,但保留所有其他错误的原始行为

您的方法:

const results=wait Promise.all(promises.map)(p=>p.catch(error=>{
if(error.statusCode==400)返回错误;
投掷误差;
})));
…将正常工作,前提是使用
结果的代码知道它将接收结果和错误对象的混合。版本:

const results=wait Promise.all(promises.map(p=>p.catch(()=>undefined));
…使
结果
数组在出现错误的每种情况下都具有值
未定义
。您所做的取决于您希望结果是什么样子。

您的方法:

const results=wait Promise.all(promises.map)(p=>p.catch(error=>{
if(error.statusCode==400)返回错误;
投掷误差;
})));
…将正常工作,前提是使用
结果的代码知道它将接收结果和错误对象的混合。版本:

const results=wait Promise.all(promises.map(p=>p.catch(()=>undefined));

…使
结果
数组在出现错误的每种情况下都具有值
未定义
。您所做的取决于您希望结果是什么样子。

是的,这应该有效。
catch(fn)
的语义是:

  • 如果
    fn
    返回一个值,则使用该值解析承诺。(除非返回的值本身是一个被拒绝的承诺,但这里的情况并非如此。)
  • 如果
    fn
    抛出异常,则该承诺将被该异常拒绝

如果从
catch
处理程序返回错误,
Promise.all
可能返回一个包含成功值和错误的数组。

是,这应该可以工作。
catch(fn)
的语义是:

  • 如果
    fn
    返回一个值,则使用该值解析承诺。(除非返回的值本身是一个被拒绝的承诺,但这里的情况并非如此。)
  • 如果
    fn
    抛出异常,则该承诺将被该异常拒绝

如果从
catch
处理程序返回错误,
Promise.all
可能返回一个包含成功值和错误的数组。

感谢您的快速响应。因此,在这种情况下,数组将包含所有解析值,除非发生其他错误(除了
400
)?这是我想要的行为。不,它还将包含错误。例如,如果您发送两个请求,第一个请求失败,第二个请求成功,您将得到类似于
[errorObject,responseObject]
的结果。如果要完全删除错误,只需从
catch
处理程序返回
undefined
null
,然后过滤数组。感谢您的快速响应。因此,在这种情况下,数组将包含所有解析值,除非发生其他错误(除了
400
)?这是我想要的行为。不,它还将包含错误。例如,如果您发送两个请求,第一个请求失败,第二个请求成功,您将得到类似于
[errorObject,responseObject]
的结果。如果要完全删除错误,只需从
catch
处理程序返回
undefined
null
,然后过滤数组。