如何在 JavaScript 中向具有多个异步调用的函数添加回调?
How can I add a callback to a function with multiple async calls in JavaScript?
function jsoncall(){
$.getJSON("http://localhost:3000/data", function (data) {...});
$.getJSON("http://localhost:3000/data", function (data) {...});
}
jsoncall.callback(function(){
//do stuff
});
类似于上面的伪代码。 JavaScript 中是否有一种方法考虑像上面 getJSON
这样的异步调用?
如果你问我认为你是什么,那么你需要在函数中实现callback
。
function jsonCall(callback) {
$.getJSON('http://localhost:3000/data', function(data) {
....
callback(data);
});
}
jsonCall(function(data) {
...
});
使用延迟:[https://api.jquery.com/jquery.deferred/][1]
function jsoncall(){
var $def = $.Deferred();
$.getJSON("http://localhost:3000/data", function (data) {
$def.resolve(data);
});
return $def;
}
jsoncall.done(function(data){
//do stuff
});
Async Call Explained(here)
创建一个 utils.js 并把你的 ajax 函数放在需要的地方调用它。
//utils.js
function doAjax(callbackFunc, method, url) {
var xmlHttpReq = new XMLHttpRequest();
xmlHttpReq.open(method, url);
xmlHttpReq.onreadystatechange = function() {
if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
callbackFunc(xmlHttpReq.responseText,buttonArrayInit);
}
}
xmlHttpReq.send(null);
}
function loadMyJson(categoryValue){
if(categoryValue==="veg")
doAjax(print,"GET","http://localhost:3004/vegetables");
else if(categoryValue==="fruits")
doAjax(print,"GET","http://localhost:3004/fruits");
else
console.log("Data not found");
}
function jsoncall(){
$.getJSON("http://localhost:3000/data", function (data) {...});
$.getJSON("http://localhost:3000/data", function (data) {...});
}
jsoncall.callback(function(){
//do stuff
});
类似于上面的伪代码。 JavaScript 中是否有一种方法考虑像上面 getJSON
这样的异步调用?
如果你问我认为你是什么,那么你需要在函数中实现callback
。
function jsonCall(callback) {
$.getJSON('http://localhost:3000/data', function(data) {
....
callback(data);
});
}
jsonCall(function(data) {
...
});
使用延迟:[https://api.jquery.com/jquery.deferred/][1]
function jsoncall(){
var $def = $.Deferred();
$.getJSON("http://localhost:3000/data", function (data) {
$def.resolve(data);
});
return $def;
}
jsoncall.done(function(data){
//do stuff
});
Async Call Explained(here)
创建一个 utils.js 并把你的 ajax 函数放在需要的地方调用它。
//utils.js
function doAjax(callbackFunc, method, url) {
var xmlHttpReq = new XMLHttpRequest();
xmlHttpReq.open(method, url);
xmlHttpReq.onreadystatechange = function() {
if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
callbackFunc(xmlHttpReq.responseText,buttonArrayInit);
}
}
xmlHttpReq.send(null);
}
function loadMyJson(categoryValue){
if(categoryValue==="veg")
doAjax(print,"GET","http://localhost:3004/vegetables");
else if(categoryValue==="fruits")
doAjax(print,"GET","http://localhost:3004/fruits");
else
console.log("Data not found");
}