![](/img/trans.png)
[英]How do I convert this chained promises code with callback to async/await
[英]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.