如何异步使用回调

时间:2018-04-20 09:32:57

标签: javascript node.js

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)

3 个答案:

答案 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

的更多信息