2016-05-24 8 views
2

多くの入れ子になったページを作成するための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ライブラリを提案しても問題ありません。

ありがとうございます。

+1

何再帰を使用してはどうですか? – frankenapps

+1

[代わりにそれらとチェーンをネスト](http://stackoverflow.com/a/22000931/1048572)? – Bergi

答えて

1

単純な再帰を行います。に行うことができます

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

いくつかの単純な再帰(あるいはループ):

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

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

約束は、あなたが1 doneから復帰チェーン内の次のdoneによって解決され、チェーンできるように設計されていますこれを何段階も深くする。

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);   
}); 
+0

再帰的な例のためにdoneで 'return genPagesRecursive(spaceKey、id、 - depth)'を意味しますか? – ste2425

+0

@ ste2425ありがとう - メソッド名の半分を変更しました。 – Jamiec

+0

私はテストし、それは魅力のように動作します。どうもありがとうございました。私は答えを投票するのに十分なポイントがありません:( –

関連する問題