我想启动一个数据库请求,该请求需要花费一些时间并使用整数(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);
在特定时间后调用回调函数,并将此调用函数的值传递给期望动作。