使用模块化JS的promises

时间:2016-12-08 04:36:00

标签: javascript jquery promise deferred modular

我正在尝试在我的代码中应用模块化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。

目前,我在第二个函数中出错,而且它没有识别我的延迟对象。

我考虑编写那些嵌套的代码然后,但我想使用模块化代码来使我的代码组织起来。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

$.ajax()返回一个jQuery promise对象,$.Deferred()不是必需的,可以删除;将.then()替换为.done(),您希望返回除{​​{1}}返回的原始承诺值以外的值,在函数调用中使用$.ajax()return。请注意,您还可以通过将.then()链接到每个链中的最后.fail()来对模式进行错误处理

.then()