我正在尝试在我的代码中应用模块化JS模式,但我很难实现promises。我习惯于使用“then”在1行中进行承诺,但现在我有单独的函数,每个函数调用服务器并将值返回给另一个函数,我不知道如何做到这一点。我很困惑如何使用done&同时解决。
以下是我的代码:
//I want to call a function, makeLinksObject(), which will call the another function that calls the server
var formattedObject = makeLinksObject();
formattedObject.done(function (renderedObject) {
render(renderObject);
})
function makeLinksObject() {
//here I want to call another function that will call the server
var dfd = getLastTimeUpdated();
var linksArray = [];
var linksObject = {};
//get site updated date
dfd.done(function (dateUpdated) {
$.each(links, function (index, value) {
var linkObject = {};
obj.Title = value.Title.toLowerCase();
linksArray.push(obj);
});
linksObject = {
lblcallerId: "some value here"
links: linksArray
}
}); // end done
return dfd.resolve(linksObject);
}
function getLastTimeUpdated() {
var modificationUrl = "serverurl"
dfd = $.ajax({
url: modificationUrl,
method: "GET",
headers: {
"accept": "application/json;odata=verbose"
}
});
dfd.done(function(data){
dfd.resolve(data.d.LastItemModified);
})
return dfd.promise();
}
如何从函数3返回服务器中的值,在函数2中使用,以及在函数1中使用的函数2的结果,然后我可以在函数1中绘制我的html。
目前,我在第二个函数中出错,而且它没有识别我的延迟对象。
我考虑编写那些嵌套的代码然后,但我想使用模块化代码来使我的代码组织起来。任何帮助,将不胜感激。
答案 0 :(得分:0)
$.ajax()
返回一个jQuery promise对象,$.Deferred()
不是必需的,可以删除;将.then()
替换为.done()
,您希望返回除{{1}}返回的原始承诺值以外的值,在函数调用中使用$.ajax()
并return
。请注意,您还可以通过将.then()
链接到每个链中的最后.fail()
来对模式进行错误处理
.then()