Javascript 异步调用函数

Javascript 异步调用函数,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我想启动一个数据库请求,它需要几次时间,并用整数(42)响应。 dbRequest()中的setTimeout代表此请求 在函数initRequest中,响应的整数应增加1。因此,initRequest应该返回43 var dbRequest = function () { setTimeout(function(){ console.log('Hello World! => 42'); return 42; }, 5000); }; var initRequ

我想启动一个数据库请求,它需要几次时间,并用整数(
42
)响应。
dbRequest()
中的
setTimeout
代表此请求

在函数
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测试=cb()+1未等待设置超时
并使用
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);

在特定时间后调用回调函数,并将该值与此调用函数一起传递给desire action。

您似乎遇到了问题。函数是异步的,这意味着它不等待。任何依赖于异步操作结果的操作都必须在其回调函数中完成。Javascript是单线程的,它不能停留在原来的函数中,也不能同时执行异步调用。这里基本上存在相同的问题:该问题处理的是
AJAX
请求,而不是
setTimeout
,但是这是同样的异步问题,为什么不在5秒后调用函数,在5秒后您将通过42,并用它执行一些操作(增量)?