如何将此代码转换为链式承诺?

时间:2016-05-24 10:07:55

标签: javascript jquery promise

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

的示例
.even td {
  background-color: #c0c0c0;
}
.fixed-col {
  position: absolute;
  left: 0;
  width: 50px;
}
table {
  margin-left: 50px;
  /* let's see where table stands (so trs and tds in the flow */
  border:solid;
}

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

谢谢。

2 个答案:

答案 0 :(得分:2)

承诺旨在被链接,您从一个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);          
});

答案 1 :(得分:1)

简单的递归就可以了。

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

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