尽管使用了try-catch块,但没有从异步等待中捕获错误



我使用一个循环来获取与给定数字相关的所有whatsapp消息,使用whatsappweb js。当这一行出现错误时;let chat=等待客户端.getChatById(nums[i](";我没能抓住它,相反,我在下一行遇到了一个错误,上面写着";聊天没有定义"!如果我删除try-catch,我不会得到任何错误,但node-js应用程序会停止响应注意:client.getChatById(id(返回一个包含聊天对象的promise。

function fetch(nums) {
for (let i = 0; i < nums.length; i++) {
try {
let chat = await client.getChatById(nums[i])
} catch (err) {
console.log(err)
};
}
return msgs = await chat.fetchMessages();
}

使用chat的代码需要位于try块内部。这是出于作用域的原因,也是因为如果调用失败,使用chat是没有意义的。

此外,循环中不应该有return,因为您希望收集所有聊天的结果。声明一个数组来容纳它们,在循环中添加到数组中,然后在末尾返回。

async function fetch(nums) {
let msgs = [];
for (let i = 0; i < nums.length; i++) {
try {
let chat = await client.getChatById(nums[i]);
msgs = msgs.concat(await chat.fetchMessages());
} catch (err) {
console.log(`while fetching ${nums[i]}`, err)
};
}
return msgs;
}

您需要移动返回:

function fetch(nums) {
for (let i = 0; i < nums.length; i++) {
try {
let chat = await client.getChatById(nums[i])
return msgs = await chat.fetchMessages();
} catch (err) {
console.log(err)
}; 
}

你把chat变量放在try/catch之外,所以它不知道变量是什么。

最新更新