繁体   English   中英

如何将此代码转换为链接的诺言?

[英]How do I convert this code to chained promises?

我想创建一个JS代码来创建许多嵌套页面。 这是创建5个嵌套页面(5个深度级别)的示例

var self = this;
var parentPageId = 1; // this is initial data. 

// 1
this._genPage(spaceKey, parentPageId).done(function (createdPage) {
    // 2
    self._genPage(spaceKey, createdPage.id).done(function (createdPage) {
        // 3
        self._genPage(spaceKey, createdPage.id).done(function (createdPage) {
            // 4
            self._genPage(spaceKey, createdPage.id).done(function (createdPage) {
                // 5
                self._genPage(spaceKey, createdPage.id).done(function (createdPage) {
                Util.showSuccessMessage('Data Generated: 5 nested pages');
            });
        });
    });
});

如何转换以上代码以创建任意数量的嵌套页面? 目前,我正在使用jQuery。 如果您建议使用任何Promise库来解决此问题,都很好。

谢谢。

承诺被设计为链接,您可以从一个返回的内容done由下一个决心done链:

this._genPage(spaceKey, parentPageId)
    .done(function (createdPage) {
       return self._genPage(spaceKey, createdPage.id);
    }).done(function (createdPage) {
       return self._genPage(spaceKey, createdPage.id);
    }); // etc

可以执行一些简单的递归(甚至是循环)来使它达到任何数量的深度。

function genPagesRecursive(spaceKey, id, depth){
   if(depth == 0){
      return 'Data Generated';
   }

   return self._genPage(spaceKey, id).done(function(createdPage){
       return genPagesRecursive(spaceKey,id,--depth);
   })
}

你甚至可以在链中的另一个done在调用递归方法:

genPagesRecursive(spaceKey, creadtedPage.id, 5).done(function(msg){
     Util.showSuccessMessage(msg);          
});

简单的递归就可以了。

function createNestedPages(spaceKey, parentPageId, numberOfPages) {
  if (numberOfPages <= 0) {
    return;
  }

  this._genPage(spaceKey, parentPageId).done(function (createdPage) {
     createNestedPages(spaceKey, createPage.id, numberOfPages - 1);
  });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM