console.log("before")
function g(p,callback){
callback('1')
}
g(1,(re)=>{
console.log(re);
})
console.log("after")
结果是在1之后。 如何使函数调用async意味着结果应该是之后1 没有setTimeout函数
用例就像
我在函数内部有一个api调用并在此函数调用后发送响应。但因为此函数被同步调用,所以发送响应被延迟。所以我想在api调用之前发送响应
console.log("before callback")
apiRes.url = [url];
apimanager.callfunc(requestBody, apiRes,(err,success)=>{
console.log("success ",success)
console.log("inside callback");
});
console.log("after callback")
return response.json(someresponse)
答案 0 :(得分:4)
您可以使用Promise.resolve()
:
console.log("before")
function g(p, callback) {
callback('1')
}
g(1, (re) => {
Promise.resolve().then(() => {
console.log(re);
});
})
console.log("after")
答案 1 :(得分:1)
你仍然可以很好地使用setTimeout,如果你想将你的回调安排到“下一个滴答”,没有任何问题,只是不要使用interval param,将在需要时立即调用回调:< / p>
console.log("before")
function g(p, callback) {
setTimeout(function () { callback('1') })
}
g(1, (re) => {
console.log(re);
})
console.log("after")
答案 2 :(得分:0)
对异步函数使用像g()
这样的回调函数会有点像这样。
首先我们需要功能
function g (p,callback){
callback(p)
};
真棒。现在,我们可以使用它来调用异步函数
fs.readFile('hello.txt','utf8',function(err,data){//readFile is async
if(err)throw Error;
g(data, console.log)//use our callback
});
Tadaa!
g将使用带参数data
的console.log。如果有效,请标记为答案。
有关here
的更多信息