0
編集 を編集することはできません、どのように私はこれを解決しない... getCurrencies
前async.forEach
仕上げをしても最初の時間を実行しているように見えるでしょうか?私は約束を返すことは、本質的にこれらの約束を一緒に「連鎖する」と思ったのですか?NodeJSの約束は、精密検査の際に、既存の「モデル」
mysqlからトランザクションを読み取ろうとする以下のコードがあります。テーブルのサイズとクエリに要する時間の長さのために、私はそれを分解して、約束を使ってオブジェクトを生成します。ただし、getCurrencies
はモデルのcurrencyCode
を更新しませんが、両方ともconsole.log
が正しい値を報告します。誰かが私が間違ってやっていることを説明できますか?私はまだ約束をするのは新しいです。ありがとう。
主要被写体建物
connection.query(query).then(function(items) {
async.forEach(items, function(element) {
element.ptype = 'merchants';
element.type = 'transactions';
element.currencyCode = null;
getCurrencies(element.currencies_id).then(function(result) {
console.log(result.currencyCode);
element.currencyCode = result.currencyCode;
console.log(JSON.stringify(element));
});
});
res.send(items);
});
getCurrencies両方console.log
S
第
からfunction getCurrencies(transactionId) {
var currencies_query = '';
currencies_query += 'SELECT ';
currencies_query += 'iso_code AS currencyCode, ';
currencies_query += 'name AS `currencyName`, ';
currencies_query += 'symbol AS `currencySymbol`, ';
currencies_query += 'exponent AS `currencyExponent`, ';
currencies_query += 'iso_num AS `currencyNumber` ';
currencies_query += 'FROM ';
currencies_query += 'currencies ';
currencies_query += 'WHERE ';
currencies_query += 'id = ' + transactionId;
return new Promise(function(resolve, reject) {
connection.query(currencies_query).then(function(rows) {
resolve(rows[0]);
});
});
};
と出力あなたが見ることができるように郵便配達
{
"id": 11213615,
"pid": 103845,
"uri": "/rest/transactions/11213615",
"puri": "/rest/merchants/103845",
"path": "/resellers/1/customers/2368/merchants/103845/transactions/11213615",
"transactionID": 11213615,
"currencies_id": 1,
"transactionUri": "/rest/transactions/11213615",
"ptype": "merchants",
"type": "transactions",
"currencyCode": null
}
から210
GBP
二
{"id":11213595,"pid":100856,"uri":"/rest/transactions/11213595","puri":"/rest/merchants/100856","path":"/resellers/1/customers/5/merchants/100856/transactions/11213595","transactionID":11213595,"currencies_id":1,"transactionUri":"/rest/transactions/11213595","ptype":"merchants","type":"transactions","currencyCode":"GBP"}
結果のAPIレスポンスは、currencyCode
はまだnull
ある - なぜ?あなたが見ることができるように:(
ための約束と 'async'を使用する必要はありません - 私はそれが
そして、私のアドバイス、「キャッチ」ブロックで仕上げチェーンを動作するはずだと思います。 –
また、問題を[mcve] –
に分けてください。これは何度も書き直しました。そして、最初の約束の結果をどのようにループしても、2番目のサブクエリは、結果が返されるまで実行されません。 – LokiSinclair