我想在执行for循环时发送响应,但它无需等待for循环即可直接发送
我尝试了不同的方法,并在异步函数中应用了等待,但是转到下一个
async (request, response) => {
let imageErr = [],
succArr = [];
/** Image processing and send to s3 */
const OriginalUrl = request.body.images;
for (const image of OriginalUrl) {
await createImage.createWebp(image, 'webp', (err, result) => {
if (err) {
imageErr.push(err);
} else {
succArr.push(result);
console.log(succArr);
}
});
/** webp */
await createImage.createJpeg(image, 'jpeg', (err, result) => {
if (err) {
imageErr.push(err);
} else {
succArr.push(result);
console.log(succArr);
}
});
}
if (succArr === 12) responseUtil.success(response, succArr);
else responseUtil.error(response, 'Fail');
};
我希望在for循环完全执行后发送响应
答案 0 :(得分:2)
似乎您使用的是一种接受回调而不返回Promise的框架(await
正常工作是必需的)。一种方法是将您的呼叫包装到Promise中。尝试这样的事情:
for (const image of OriginalUrl) {
await new Promise((res, rej) => {
createImage.createWebp(image, 'webp', (err, result) => {
if (err) {
imageErr.push(err);
} else {
succArr.push(result);
}
res(); // <-- Important
});
});
(...)
}
您还可以使用rej
,但是您必须将其作为例外。您的选择。
旁注: if (succArr === 12)
,您是说if (succArr.length === 12)
吗?另外,我认为这是为了调试,因为对字面量12
进行硬编码绝对不是一个好主意。