gpt4 book ai didi

javascript - Async Await Promise.all Array.map 未按预期运行。不知道为什么

转载 作者:行者123 更新时间:2023-12-01 01:16:02 26 4
gpt4 key购买 nike

我的一个项目的异步函数中有以下内容。 matchCameramatchIPmatchAudio 都返回 bool 值或错误。

如果返回错误,我希望它落入我的主捕获中,以便我可以处理它,但这并没有发生。

try {
// .... Additional code here

const typecheck = await Promise.all(
evoCfg.cameras.map(async camera => {
if (camera.type === 'H264') {
return await matchCamera(camera);
} else if (camera.type === 'RTSP') {
return await matchIP(camera);
} else if (camera.type === 'AUDIO') {
return await matchAudio(camera);
} else {
// Motion JPEG
return true;
}
})
);

// .... additional code here

console.log('results:);
console.dir(typecheck, {depth: null, colors: true});
} catch (e) {
console.error('In Master Catch:', e);
}

当我导致错误情况时,我不断得到的输出是:

results:
[ true,
true,
true,
true,
true,
true,
Error: MAC for IP Cam not found on Network: 00:11:22:33:44:55
at matchIP (/file.js:58:15)
at process._tickCallback (internal/process/next_tick.js:68:7),
true ]

我期待:

In Master Catch: MAC for IP Cam not found on Network: 00:11:22:33:44:55
at matchIP (/file.js:58:15)
at process._tickCallback (internal/process/next_tick.js:68:7)
<小时/>
const matchIP = async source => {
let arpScan = [];

for (const c in obj.arr){
if(obj.arr[c].name === source.source) {
try {
arpScan = await scannerP();

let arpIdx = searchObjArray(source.mac, source.mac, 'mac', 'mac', arpScan);
if(arpIdx === -1) {
// not found on network
throw new Error(`MAC for IP Cam not found on Network: ${source.mac}`);
}

for (const cs in obj.arr[c].sources) {
if (
obj.arr[c].sources[cs].id === arpScan[arpIdx].mac &&
obj.arr[c].sources[cs].url === `rtsp://${arpScan[arpIdx].ip}/${source.streamPort}`
) {
return true;
}
}
let recorderIdx = searchObjArray(
'rtsp',
source.mac,
'fmt',
'id',
obj.arr[c].sources
);

source.streamAddress = arpScan[arpIdx].ip;
obj.arr[c].sources[recorderIdx].url = `rtsp://${arpScan[arpIdx].ip}/${source.streamPort}`;
return false;
} catch (e) {
return e;
}
}
}
};

最佳答案

问题是你的 matchIP 函数中有

try {
// ... code
catch (e) {
return e;
}

因此,它将错误作为值返回,而不是将其抛出以供外部 block 捕获。

此外,正如其他人指出的那样。通过在 map 函数中使用 await,您基本上会破坏 Promise.all 的值(value)。将 await 去掉。

关于javascript - Async Await Promise.all Array.map 未按预期运行。不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54756920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com