Pie*_*nes 2 javascript loops node.js async-await typescript
我正在为异步等待功能的循环而苦苦挣扎。我正在创建一个向另一个 API 发送请求的 API。我必须做一个循环,因为用户可以一次在数据库中插入许多项目。
我调用的 API 拒绝并行执行,所以我不能使用Promise.all:/
为了实现该服务,我创建了一个函数来插入一个对象:
const addValue = async (ID:number, cookie: string) => {
try {
const addValueBody = await addValueQuery(ID:number)
const header = { 'cookie': cookie, 'content-type': 'application/json' }
const fetchResult = fetch('http://api-to-call.xyz', { method: `POST`, headers: header, body: addValueBody })
const response = await fetchResult
const jsonData = await response.json()
return jsonData
} catch (e) {
throw Error(e.message)
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个将addValue在 for 循环内执行的函数:
const addMulti = async (values: any, cookie: string) => {
for (const item of values) {
await addValue(item.ID, cookie)
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我调用 addMulti 并且出现错误时,我有一个UnhandledPromiseRejectionWarning.
我也试图把 defor ... in或await addValueinside atry catch但它没有捕捉到错误
因此,我有两个问题:
如果在循环执行期间发生错误,我该如何抛出错误?如果出现错误,是否可以中断循环?
谢谢你的帮助 :)
如果在循环执行期间发生错误,我该如何抛出错误?如果出现错误,是否可以中断循环?
您的代码已经通过awaiting做到了这一点addValue。如果addValue抛出错误,因为addMulti没有catch,它addMulti也会终止。
问题是,当我调用 addMulti 并且出现错误时,我有一个 UnhandledPromiseRejectionWarning。
您显示的代码是正确的¹,问题是您在调用addMulti. 该代码必须:
try/catch在async函数中,如果你不想让它传播,或者通过catch方法,如果直接使用承诺),或async函数中捕获它,或通过在非async函数中返回承诺)因此,例如,如果调用addMulti是在一个非async函数中,并且如果没有调用该函数的东西会处理错误,那么您需要在那个阶段处理它:
addMulti(/*...*/)
.catch(error => {
// ...handle/report the error
});
Run Code Online (Sandbox Code Playgroud)
如果它在一个async函数中但没有处理该async函数的错误,那么:
try {
await addMulti(/*...*/);
} catch (e) {
// ...handle/report the error
}
Run Code Online (Sandbox Code Playgroud)
¹ ...除了捕捉e然后做这件事似乎很奇怪throw Error(e.message);只是让错误传播。
| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |