首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用模组JS的承诺

使用模组JS的承诺
EN

Stack Overflow用户
提问于 2016-12-08 04:35:59
回答 1查看 68关注 0票数 0

我试图在代码中应用模块化的JS模式,但很难实现承诺。我习惯于使用“那时”在一行中承诺,但现在我有了单独的函数,每个函数都调用服务器并将一个值返回给另一个函数,我不知道如何做到这一点。我搞不懂怎么才能同时使用“完成”和“解决”。

下面是我的代码:

代码语言:javascript
复制
   //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。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 04:54:05

$.ajax()返回一个jQuery允诺对象,$.Deferred()不是必需的,可以移除;在要返回从$.ajax()返回的原始允诺值以外的值的.done()中替换.then(),在函数调用和.then()中使用return。注意,还可以通过将.fail()链接到每个链中的最后一个.then()来对模式进行错误处理。

代码语言:javascript
复制
   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;
     })

   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41031854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档