Promise.all从API的拒绝
我已经通过其他stackoverflow答案看了,似乎无法找到答案。Promise.all从API的拒绝
实际上,我正在写一个模块来验证一些数据,然后如果没有错误将它传递给第三方api。
我的问题是,如果Promise.all拒绝,那么我的初始呼叫承诺仍然移动到下一个。
------my main app--------- const data = [1,0,1]
api.sendData(data)
.then(() => {
*ALWAYS HITTING THIS*
})
.catch(err => console.log(err))
---------the api---------
return await a.test(data).then(rd => {
return rd
})
.catch(ed => {
return ed
});
-----a.test function--------
let request = data.map((i) => {
return new Promise((resolve, reject) => {
if(i < 1) {
reject('value to low')
}
resolve(i);
});
});
return await Promise.all(data)
});
有谁能告诉我为什么我的catch没有在我的主应用程序中被击中? 上面的代码是伪的,但描述了这个问题。
回答:
我认为这个问题是来自你抓住的API函数的错误和catch method return a new promise(满足你有效地返回一个值)
,所以如果你不抓住错误的事实,你的问题应该是固定的因为错误将被转发
return a.test(data).then(rd => { // do some stuffs ...
return rd;
})
// no catch
回答:
你可能有一个错字。 正如你写的,你尝试Promise.all()一个整数数组,这将全部解决。
您应该返回return await Promise.all(request)
而不是return await Promise.all(data)
,因为否则不会有任何被拒绝的承诺。
回答:
你只能抓一个承诺一次,你在catch返回的内容是怎样的未来then
将解决或拒绝:
Promise.reject(88) .catch(err=>"Hello World")
.then(resolve=>console.log("resolve is:",resolve))
Promise.reject(88)
.catch(err=>Promise.reject("Hello World"))//reject again
.catch(err=>console.log("reject is:",err))
相反的:
return await a.test(data).then(rd => { return rd
})
.catch(ed => {
return ed
});`
你可以这样做:return a.test(data)
提供没有任何意义的其他代码。如果您想提出一些请求,但希望获得所有结果,即使其中一些失败,您也可以查看this answer(最后一个代码块)。
这一回答解释了一下为什么创建的承诺,我会建议你,直到你明白什么是承诺,以及如何使用不使用异步语法them.`
以上是 Promise.all从API的拒绝 的全部内容, 来源链接: utcz.com/qa/266431.html