gpt4 book ai didi

javascript - 使用多个 $.getJSON 调用从 $.when 返回数据

转载 作者:行者123 更新时间:2023-11-30 18:12:23 25 4
gpt4 key购买 nike

在下面的代码中,我使用 $.getJSON(从存储库返回)和 $.when 检索数据,因为最后一次调用取决于来自第一:

var getData =

function () {

var data = { userData: null, userTitles: null, userPage: null };

$.when(repository.getUserDetails().done(f1)),
repository.getUserPolicyTitles().done(f2)
.then(repository.getUserPage().done(f3));


function f1(userData) { data.userData = userData; console.log(data.userData) };
function f2(userTitles) { data.userTitles = userTitles; console.log(data.userTitles) };
function f3(userPage) { data.userPage = userPage; console.log(data.userPage) };

return data;
}

return {
getData: getData
};

其中大部分工作正常。但是,我想将数据返回给调用模块,但它会在数据准备好之前返回,正如我想您所期望的那样。

实现此目标的最佳方法是什么?

谢谢

戴维

最佳答案

您对 deferred 的使用似乎不正确。这是我的解释。

此外,您还需要考虑,一旦开始调用异步方法,就无法进行同步返回调用,而这正是您正在做的事情。您需要返回一个 promise ,而不是返回数据;然后你为 promise 提供一个回调函数来处理数据

var getData = function () {
var myDeferred = $.Deferred();
var data = { userData: null, userTitles: null, userPage: null };

$.when(repository.getUserDetails().done(f1),
repository.getUserPolicyTitles().done(f2),
repository.getUserPage().done(f3)).then(
function(){ myDeferred.resolve(data); },
function(){ myDeferred.reject.apply(myDeferred, arguments); });

//... f1, f2, f3

return myDeferred.promise();
}

return {
getData: getData
};

然后,当您想实际使用数据时,您就可以

your_library.getData().then(function(data){
// magic goes here
}, function(errors_of_some_sort) {
// error handling magic goes here
});

关于javascript - 使用多个 $.getJSON 调用从 $.when 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14288763/

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