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,并用它执行一些操作(增量)?