如何在JavaScript中使用多个异步调用添加回调函数?
问题描述:
function jsoncall(){
$.getJSON("http://localhost:3000/data", function (data) {...});
$.getJSON("http://localhost:3000/data", function (data) {...});
}
jsoncall.callback(function(){
//do stuff
});
类似上面的伪代码。 JavaScript中是否有一种方法将上述的异步调用看作getJSON
?如何在JavaScript中使用多个异步调用添加回调函数?
答
递延: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
});
+0
没有寻找getJSON的回调,延迟部分是我想要的,设置为答案,谢谢。 –
答
如果你问我认为你是什么,那么你需要执行callback
中的这个函数。
function jsonCall(callback) {
$.getJSON('http://localhost:3000/data', function(data) {
....
callback(data);
});
}
jsonCall(function(data) {
...
});
+0
没有寻找getJSON的回调,而是整个函数的整体,因为它会有多个getJSONs,对不起。 –
答
做一个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(data){...}'回调? :) – Shilly
在功能上,'jsoncall'就像'$ .getJSON' - 你可以简单地执行'jsoncall = $ .getJSON',因为它们在功能上是相同的。如果你需要等待**直到完成,那么我建议查看'$ .Deferred'或ES6 Promise。 – chazsolo
'function jsoncall(){return $ .getJSON(...)}'然后是'jsoncall()。then(callback)'但jQuery的延期实现是imo。根据您使用的版本,不好也不好。我建议你看看“真实”的承诺。 – Thomas