私は、コールバックベースのメカニズムの多くを利用して私の既存のJavaScriptコードでブルーバードの約束をどのように利用できるか知りたい。私の既存のJavaScriptのトラバースと再帰的なロジックにブルーバードの約束を適用するには?
WebアプリケーションでjQueryを使用してページをロードすると、ページのメインメニューリンクが表示され、TreeModelという構造が生成され、後でページ上部にパンフレットが表示されます。私はこのTreeModelのを生成するために使用しています
機能は以下の通りです:
function _traverseNodeChildren(selector, parentNode, callback1, callback2) {
$(parentNode.model.element).find(selector).each(function(idx, elm) {
// Create a Tree Node using TreeModel
let node = _createTreeNode.apply(this.comp, [elm]);
this.parentNode.addChild(node);
let hasChildren = $(elm).find("+ul.dropdown-menu").length > 0;
if (hasChildren == true)
_traverseNodeChildren.apply(this.comp, ["+ul.dropdown-menu > li > a", node, callback1, callback2]);
if (node.model.id == "aboutLink") // last node
{
setTimeout(() => {
callback1.apply(this.comp, [callback2]);
}, 100);
}
}.bind({parentNode: parentNode, comp: this}));
}
を上記トラバーサルが完了した後、私は、この非同期要求の完了に非同期Ajaxリクエストやポストを伴いますmyServerCall
関数を呼び出したいです最後に、第3の関数myFinalFunc
を呼び出したいと思います。
現時点では私はこの横断コードを実行させるには、次のコードを使用しています:
const TreeModel = require('tree-model');
const _treeModel = new TreeModel();
let _bcRoot = _treeModel.parse({
id: "0",
href: null,
text: "",
element: $(".main-menu").get(0)
});
_traverseNodeChildren.apply(this, ["> li > a[data-bc-id]",
_bcRoot, myServerCall, myFinalFunc]);
しかし、私はそれをより細かく制御を取得するために青い鳥約束に基づくアプローチに変換したいと思います。続き
は、それが最後になりたい私が欲しいのコードです:
_traverseNodeChildren.apply(this, ["> li > a[data-bc-id]", _bcRoot])
.then(function() {
return myServerCall();
})
.then(function() {
return myFinalFunc();
})
.catch(function(error) {
});
私はこの使用して青い鳥をどのように行うことができますか?
'callback1'とは何ですか、' callback2'とは何ですか?なぜ '_traverseNodeChildren'に' setTimeout'を使っていますか?非同期なことは何もしません。 – Bergi
これらのすべての 'apply'コールはなぜですか?それぞれのメソッドを持つターゲットインスタンスではありませんか? – Bergi
@bergiこれは実際には擬似コードの一種です。コールバックについて1コールバック2あなたの完全な質問を読んでいますか?これらは 'myServerCall'と' myFinalFunc'です。そして、これらの2つの関数は非同期になります。 –