node.jsには、Q.all()。then();を実行したいときにPromisesの配列があります。プロセスは、何も起こっていないようです。たぶん私の配列に未解決の約束があり、プロセスをブロックしたのでしょうか?私はここで何をやっているのかは分かりませんが、私の目標は一度にすべての関数を実行することです。次に、完全な "トークン"配列を取得して別のファイルに送ります。
Q.all()で正しく行うにはどうしたらいいですか?
Node.js Q.all()と約束事の配列
var pipo = new Array();
var ref_accounts = firebase.database().ref('accounts');
geoQuery.on("key_entered", function(lakey, location, distance) {
pipo[lakey] = lakey;
});
// I have here my pipo Array full of data
var promises = [];
var token = [];
for (var key in pipo) {
var deferred = Q.defer();
var ref = firebase.database().ref("etablissements").orderByKey().equalTo(value).on("child_added", function(snapshot) {
var data = snapshot.val();
if ((data.alerte != false) && (data.categorie === categories)) {
var ref2 = firebase.database().ref("accounts").orderByKey().equalTo(value).on("child_added", function(snapshot2) {
var data2 = snapshot2.val();
if (data2.token != null) {
token.push(data2.token);
deferred.resolve(data2);
} else {
deferred.reject();
// or deferred.resolve(); ??
}
});
} else {
deferred.reject();
// or deferred.resolve(); ??
}
});
promises.push(deferred.promise);
}
私は私の「約束」私は一度にすべてを実行し、その後
Q.all(promises).then(function(results) {
var uniqueNames = [];
for (i = 0; i < token.length; i++) {
if (uniqueNames.indexOf(token[i]) === -1) {
uniqueNames.push(token[i]);
console.log('tokens' + token[i]);
}
},
// error
function(response) {
console.log('Error in then' + response);
}).catch(function(error) {
console.log('CATCH ERROR' + error);
});
// Send token array to the API
});
私は本当に理解していない配列に巻き込まれたすべてのトークンを取得するためにここにしたい完全な配列と今 を持っていますプロセス。このコードで何が間違っているか教えてください。
問題はおそらくforループに関係しています。 'for(var in key in pipo)'の関数ブロックの内容を別の関数に抽出し、それが役立つかどうか確認してください。 (Googleはループのjavascriptで関数を作成しないでください)。代わりにここで 'array.map()'を使うことをお勧めします。 – vincent
出力されるエラーをキャプチャするために.catch()ブロックを追加することから始めたいと思うでしょう。 Q.all()メソッドが呼び出される前に(コードが実際にここに作成されることを確認するために)、.then()の内部でさらにログを取って、実際に解決するかどうかを知る必要があります。最後の手段として、あなたはしたいでしょう let count = 0; promises.forEach(()=> console.log(++ count、 'done')); – Kato
(デューデリジェンスの基本的なデバッグ;すべての出力をチェックし、障害点を特定する) – Kato