【发布时间】:2022-01-11 00:29:45
【问题描述】:
我正在开发一个使用 express 和 node js 构建的项目。 我只需要调用 SetTimeout 函数中的异步函数(回调)
这是我的控制器文件
module.exports.create = async (req, res) => {
try {
// Some DB Calls
setTimeout(() => updateWhOrders(req.Orders, req), 0)
// Some DB Calls
return res.status(200).json({ data , msg: "record created successfully", success: true })
} catch (error) {
if (error?.message?.includes("Validation error")) {
return handleErr({ message: "This supplier order id has already been added. Please refresh the page and check further down the screen." }, res)
}
return handleErr(error, res)
}
}
这是同一个控制器中的异步函数
const updateWhOrders = async (allOrders, req) => {
// Some DB Calls using async await
await SourceOrder.bulkCreate(allOrders.data, { updateOnDuplicate: ["wh_address"] })
}
现在我想问一下这两种说法的区别
1. setTimeout(() => updateWhOrders(req.Orders, req), 0)
2. updateWhOrders(req.Orders, req)
我只想在将响应发送回 API 之前并行调用 updateWhOrders 函数。
使用 setTimeout 函数有什么特别的原因吗?或者如果我省略 setTimeout 函数,它的行为会与使用 setTimeout 函数完全相同?
根据我的理解,如果我省略 setTimeout 函数,它将通过返回一个承诺在后台运行。如果我在 setTimeout 函数中调用 function(updateWHOrders) 会怎样。有什么好处?如果我错了,请纠正我。
提前谢谢你:)
【问题讨论】:
-
使用
setTimeout(func,0)只会让Node暂时跳过这一行,运行所有同步代码,然后运行func。 -
if I omit setTimeout function it will run in the background by returning a promise--> 不,它无论如何都会返回一个 Promise(它是一个async函数)。 -
@JeremyThille。它不会通过返回一个promise来处理后台的函数吗?因为异步函数总是返回承诺
-
如果我省略了 setTimeout 那么它不会通过执行所有剩余的代码来调用 func 吗?
-
什么是
rows?它没有定义...
标签: javascript node.js express es6-promise asynchronous-javascript