gpt4 book ai didi

javascript - 连续调用多个函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:31 25 4
gpt4 key购买 nike

我知道这个问题已经被问过好几次了,但是我似乎无法找到适用于我的代码的解决方案:Wait till a Function with animations is finished until running another Function , jquery wait for multiple complete events , Wait for the end of TWO asynchrounous functions before firing a third (jQuery Deferred ?)

基本上,我想依次调用四个函数:

#1
function getJason() {
$.getJSON(rgUrl1,function(json1){
rgJson1 = json1; ...etc.
});


#2
function combineJason() {
//code to combine
});


#3
function divideArray() {
//code to divide stuff
});


#4
function doOtherStuff() {
//code to do some other stuff
});

我需要 #1 在调用 #2 之前完成,#2 在 #3 之前完成,#3 在 #4 之前完成。过去的帖子让我相信我应该使用 deferrds 和 promises。我已通读文档 http://api.jquery.com/category/deferred-object/并尝试了一些没有成功的例子:

function testing() {

var deferredObj = $.Deferred();
var test = getJson()
var function1 = function () {

test.done(function(){

deferredObj.resolve();

return deferredObj;
});

}

deferredObj.done(function(){
combineJson();
});
};

此外,大多数示例都涉及两个函数,而我需要调用多个函数。我还注意到一些响应包含“setTimeout”。我对使用带有定时器、暂停或延迟的任何东西有点怀疑,也许是不必要的。难道我不必猜测该功能将花费多长时间。如果一个用户的计算机/连接速度较慢或其他原因怎么办?

最佳答案

jQuery 的 ajax 函数已经返回一个 promise 。因此,如果您使用 jquery 的 ajax 函数,则无需创建新的延迟对象。

要连续调用您的函数:为您需要调用的任意多个函数调用.then 方法。如果您的一个或多个函数需要执行一些异步任务,那么只需返回一个 promise ,延迟对象将等待调用下一个 then 回调,直到返回的 promise 得到解决。每个 then 回调将传递在前一个 then 中返回的数据(或者在返回 promise 的情况下解析数据)

$.getJSON(rgUrl1,function(json1){
rgJson1 = json1; ...etc.
}).then(combineJason)
.then(divideArray)
.then(doOtherStuff);

//#2
function combineJason(someData) {
//code to combine
return $.getJSON("url to some other json endpoint");
}

//#3
function divideArray(someData) {
//code to divide stuff
//this function is sync so just return some data
return someNewData;
}

//#4
function doOtherStuff(someData) {
//code to do some other stuff
//this function is async so return a promise;
return $.getJSON("url to some other json endpoint");
}

JSFiddle Demostrating mixed async/sync succession

关于javascript - 连续调用多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com