![](/img/trans.png)
[英]How can I call multiple asynchronous depended functions asynchronously for each iteration?
[英]How can I call multiple asynchronous javascript functions in sequence?
我試圖依次調用以下函數,但它們不一定以正確的順序返回。
然后,我了解了可以使用“回調”順序調用的異步函數。
如何使用回調按順序執行這些功能?
$.getJSON('http://localhost/search_data.php?title='+title+'&run=annotations&jsoncallback=?', function(r1){
$.each(make_all_titles3(r1), function (i,v) {
$vpl.append(v);
});
});
$.getJSON('http://localhost/search_data.php?title='+title+'&run=Link&jsoncallback=?', function(r2){
$.each(make_all_titles3(r2), function (i,v) {
$vpl.append(v);
});
});
$.getJSON('http://localhost/search_data.php?title='+title+'&user='+user+'&run=bookmarks&jsoncallback=?', function(r3){
$.each(make_all_titles3(r3), function (i,v) {
$vpl.append(v);
});
});
$vpl.append('<div>Related Terms</div>');
$.getJSON('http://localhost/context-search.php?title='+title+'&jsoncallback=?', function(r4){
$.each(make_all_titles3(r4), function (i,v) {
$vpl.append(v);
});
});
最簡單的解決方案是簡單地嵌套調用。 向下滾動以獲取清晰易讀的解決方案。
function _process(r) {
$.each(make_all_titles3(r), function (i, v) {
$vpl.append(v);
});
}
$.getJSON('http://localhost/search_data.php?title=' + title + '&run=annotations&jsoncallback=?', function (r) {
_process(r);
$.getJSON('http://localhost/search_data.php?title=' + title + '&run=Link&jsoncallback=?', function (r) {
_process(r);
$.getJSON('http://localhost/search_data.php?title=' + title + '&user=' + user + '&run=bookmarks&jsoncallback=?', function (r) {
_process(r);
$vpl.append('<div>Related Terms</div>');
$.getJSON('http://localhost/context-search.php?title=' + title + '&jsoncallback=?', function (r) {
_process(r);
});
});
});
});
現在使用async
庫,干凈易讀:
var load = [
{ url: 'http://localhost/search_data.php?title=' + title + '&run=annotations&jsoncallback=?', before: null },
{ url: 'http://localhost/search_data.php?title=' + title + '&run=Link&jsoncallback=?', before: null },
{ url: 'http://localhost/search_data.php?title=' + title + '&user=' + user + '&run=bookmarks&jsoncallback=?', before: null },
{ url: 'http://localhost/context-search.php?title=' + title + '&jsoncallback=?', before: function() { $vpl.append('<div>Related Terms</div>'); } }
];
async.forEachSeries(load, function(item, next) {
if(item.before) {
item.before();
}
$.getJSON(item.url, function(r) {
$.each(make_all_titles3(r), function (i, v) {
$vpl.append(v);
});
next();
});
});
在這里看到我的問題: 關於Node的代碼樣式
而且,我提供了一個輔助函數,用於使嵌入式回調直接調用。
它適用於NodeJS和瀏覽器JS。
ajaxcall1(parameter, function() {
ajaxcall2(parameter, function() {
ajaxcall3(parameter, function() {
alert("lol");
};
};
});
說明:在第一個返回其結果時調用第二個ajax調用,在第二個返回時調用3d。
使用ajax異步false選項
$.ajaxSetup({ async: false });
// put your three get methods here
$.ajaxSetup({ async: true });
注意:這將停止動態頁面功能,直到總代碼塊執行完畢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.