我试图在代码中应用模块化的JS模式,但很难实现承诺。我习惯于使用“那时”在一行中承诺,但现在我有了单独的函数,每个函数都调用服务器并将一个值返回给另一个函数,我不知道如何做到这一点。我搞不懂怎么才能同时使用“完成”和“解决”。
下面是我的代码:
//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中使用,以及函数2的结果,在函数1中使用,然后在函数1中绘制我的html。
目前,我在第二个函数中有一个错误,它没有识别我的延迟对象。
然后,我考虑编写嵌套的代码,但我想使用模块化代码来组织代码。任何帮助都将不胜感激。
发布于 2016-12-08 04:54:05
$.ajax()返回一个jQuery允诺对象,$.Deferred()不是必需的,可以移除;在要返回从$.ajax()返回的原始允诺值以外的值的.done()中替换.then(),在函数调用和.then()中使用return。注意,还可以通过将.fail()链接到每个链中的最后一个.then()来对模式进行错误处理。
var formattedObject = makeLinksObject();
formattedObject
.done(function(renderedObject) {
render(renderObject);
})
function makeLinksObject() {
var dfd = getLastTimeUpdated();
var linksArray = [];
var linksObject = {};
return dfd.then(function(dateUpdated) {
$.each(links, function(index, value) {
var linkObject = {};
obj.Title = value.Title.toLowerCase();
linksArray.push(obj);
});
linksObject = {
lblcallerId: "some value here",
links: linksArray
}
})
.then(function() {
return linksObject
});
}
function getLastTimeUpdated() {
var modificationUrl = "serverurl"
return $.ajax({
url: modificationUrl,
method: "GET",
headers: {
"accept": "application/json;odata=verbose"
}
})
.then(function(data) {
return data.d.LastItemModified;
})
}https://stackoverflow.com/questions/41031854
复制相似问题