我想启动一个数据库请求,该请求需要花费一些时间并使用整数(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响应?

最佳答案

完全不了解您的情况,但是要获得期望的结果,您可以执行以下操作。

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);


在特定时间后调用回调函数,并将此调用函数的值传递给期望动作。

10-08 09:36