次のコード例があります。JavaScriptプロミス依存関係処理
var Promise = require('bluebird');
var model = function (object) {
this.name = object.name;
};
model.prototype.download = function() {
var self = this;
return new Promise(function (resolve, reject) {
setTimeout(function() {
resolve();
}, Math.random() * 100)
});
};
model.prototype.process = function() {
var self = this;
return new Promise(function (resolve, reject) {
setTimeout(function() {
console.log('processed: ', self.name);
resolve();
}, Math.random() * 100)
});
};
var models = [new model({
name: 'user',
requires: ['company']
}), new model({
name: 'address',
requires: ['user', 'company']
}), new model({
name: 'company'
})];
Promise.map(models, function (model) {
return model.download()
.then(function() {
return model.process();
});
});
このコードの必要な出力は次のようになります。
processed: company // 1rst, because company model has no dependencies
processed: user // 2nd, because user requires company
processed: address // 3rd, because address requires company and user
私は何とか依存関係を管理する必要があります。 model.process
関数は、モデルの必要なモデルのすべてのprocess
関数がすでに解決されている場合にのみトリガされます。
これはほんの少しの例ですが、複数の依存関係を持つモデルがたくさんあります。
download
機能を同期して起動し、できるだけ早く機能を起動する必要があります。process
私は解決するためにすべてのダウンロードを待つことができず、process
の後に電話することができません。 https://github.com/caolan/async#control-flow
がシリーズ、並列とキュー方法を確認してください:
あなたの正確な問題は何ですか?あなたは上記の状況に対処する約束を使用したいですか?そして、「私はすべてのダウンロードが解決されるのを待つことができず、後にプロセスを呼び出すことができません。 – Dnyanesh
あなたのコードは「モデルの必要なモデル」について何も表示していません。 –
ちょっと@Dnyanesh、あなたの返信ありがとう、私は理解しやすくするために私の例を更新しました。 – Adam