调用函数异步

时间:2014-04-19 14:16:31

标签: javascript asynchronous callback

我想发起一个数据库请求,这需要几次时间和一个整数(42)的响应。 setTimeout中的dbRequest()代表此请求。

响应的整数应在函数initRequest中递增1。因此initRequest应该返回43

var dbRequest = function () {

  setTimeout(function(){
    console.log('Hello World! => 42');
    return 42;
  }, 5000);

};

var initRequest = function (cb){
  var test = cb() + 1;
  console.log('Incremented Value: ' + test);
  return test;
};

initRequest(dbRequest);

不幸的是,var test = cb() + 1;并未等待setTimeout并使用NaN进行计算。 输出:

Incremented Value: NaN
// 5 sec delay
Hello World! => 42

如何使此功能异步,以便initRequest等待dbRequest响应?

1 个答案:

答案 0 :(得分:2)

完全不知道你的情况,但为了获得渴望的结果,你可以做这样的事情。

var dbRequest = function (callback) {
    setTimeout(function(){
        console.log('Hello World! => 42');
        callback(42);
    }, 5000);
};

function initRequest(val){
    var test = val + 1;
    console.log('Incremented Value: ' + test);
}

 dbRequest(initRequest);

在特定时间后调用回调函数,并使用此调用函数传递值以进行所需操作。