Javascript 函数回调取决于超时
Javascript function callback dependant on timeout
我有一个 javascript 函数,它向 Web 服务发出请求并处理响应。
我想在函数中设置超时,因为 Web 服务有时可能不稳定。
在我下面的示例中,我有两个超时,第二个将被对 Web 服务的请求所取代。但是在下面的示例中,回调仍然是 运行 两次。我是否以正确的方式处理此问题?如何在返回错误回调后停止函数。
function fnWithTimeoutCallback(v1, v2, callback) {
// set a timeout after 3 seconds
setTimeout(function(){
var err = true;
var res = {};
res.status = 'error';
res.message = 'Request timed out.';
return callback(err, res);
}, 3000);
// meanwhile do a bunch of stuff which makes requests to web services etc
setTimeout(function(){
var err = false;
var res = {};
res.status = 'success';
res.message = 'Did stuff with web service.';
return callback(err, res);
}, 6000);
}
fnWithTimeoutCallback('v1', 'v2', function(err, res) {
if(err) {
console.log('There was an error: ' + res.message);
} else {
console.log('Worked!' + res.message);
}
});
您可以使用clearTimeout函数来清除超时,您需要将setTimeout保存到一个变量中并根据需要清除。
var timeout1 = setTimeout (function(){
//check and clear timeout2
clearTimeout(timeout2);
},6000);
var timeout2 = setTimeout (function(){
//check and clear timeout1
clearTimeout(timeout1);
},6000);
我有一个 javascript 函数,它向 Web 服务发出请求并处理响应。
我想在函数中设置超时,因为 Web 服务有时可能不稳定。
在我下面的示例中,我有两个超时,第二个将被对 Web 服务的请求所取代。但是在下面的示例中,回调仍然是 运行 两次。我是否以正确的方式处理此问题?如何在返回错误回调后停止函数。
function fnWithTimeoutCallback(v1, v2, callback) {
// set a timeout after 3 seconds
setTimeout(function(){
var err = true;
var res = {};
res.status = 'error';
res.message = 'Request timed out.';
return callback(err, res);
}, 3000);
// meanwhile do a bunch of stuff which makes requests to web services etc
setTimeout(function(){
var err = false;
var res = {};
res.status = 'success';
res.message = 'Did stuff with web service.';
return callback(err, res);
}, 6000);
}
fnWithTimeoutCallback('v1', 'v2', function(err, res) {
if(err) {
console.log('There was an error: ' + res.message);
} else {
console.log('Worked!' + res.message);
}
});
您可以使用clearTimeout函数来清除超时,您需要将setTimeout保存到一个变量中并根据需要清除。
var timeout1 = setTimeout (function(){
//check and clear timeout2
clearTimeout(timeout2);
},6000);
var timeout2 = setTimeout (function(){
//check and clear timeout1
clearTimeout(timeout1);
},6000);