私はオブジェクトで配列を解決しようとしていますが、配列は1つの値だけを返します。 scrapeModuleはテキスト値の配列を返します。コードは次のとおりです。プロミスから未定義になるのはなぜですか? -
"use strict";
var scrapeModule = require("./scrape");
const accounts = function(promiseObj, link) {
// Update the url-value in promiseObj
promiseObj.url = promiseObj.url.replace(config.url.substring(19), JSON.parse(link));
return scrapeModel(promiseObj).then((arrayContainingText) => {
let arrayIWantToSend = []
arrayContainingText.forEach(function(nameHTML) {
fetchObj(promiseObj, name).then(function(data) {
arrayIWantToSend.push(data)
return data;
console.log(data) =>
[ { key1: 'v1', key2: 'v2', key3: 'v3'},
{ key1: 'v1', key2: 'v2', key3: 'v3'},
{ key1: 'v1', key2: 'v2', key3: 'v3'} ]
})
});
};
const fetchObj = function(promiseObj, link) {
let keyValues = {};
// Clone the old promiseObj
let thObj = JSON.parse(JSON.stringify(promiseObj));
let tdObj = JSON.parse(JSON.stringify(promiseObj));
// Replace the track-values
thObj.track = "th";
tdObj.track = "td";
return Promise.all([scrapeModule((thObj)), scrapeModule((tdObj))]).then(data => {
let key = data[0];
let v = data[1];
for (let i = 0; i < data.length; i++) {
for (let y = 0; y < data[i].length; y++) {
keyValues[key[y]] = data[y];
}
}
return keyValues
});
};
module.exports = accounts;
私はこのコードを使って別のモジュールに結果を記録しています。私は、関数からの戻り値は、値の配列になりたい:私は口座の約束(で「データ」にconsole.logとき)
accounts(url, link)
.then(function(data) {
console.log(data)
}); -- > //[ undefined ]
しかし、配列が返されます。
[ { key1: 'v1', key2: 'v2', key3: 'v3'},
{ key1: 'v1', key2: 'v2', key3: 'v3'},
{ key1: 'v1', key2: 'v2', key3: 'v3'} ]
を助言がありますか?
今、その関数が奇妙に見えるので、私はfetchObj
への変更を加えていないてきたあなたのコードが大幅にすぎ
var scrapeModule = require("./scrape");
const accounts = function(promiseObj, link) {
// Update the url-value in promiseObj
promiseObj.url = promiseObj.url.replace(config.url.substring(19), JSON.parse(link));
return scrapeModel(promiseObj)
.then(arrayContainingText =>
Promise.all(arrayContainingText.map(nameHTML =>
fetchObj(promiseObj, name)
))
);
};
const fetchObj = ... // no changes
module.exports = accounts;
、私はまた、他のES6「機能」を追加しました、let
の使用を考慮し、簡素化することができる
と '何を返すscrapeModule'んがPromise.allするには、それらを送っ? –
ここで 'accounts()'に値を記録していますか?あなたが作成している最初の約束のために 'resolve()'を呼び出しているところはどこですか?あなたが私たちに示していないコードがあるようです。 – JLRishe
FWIW、あなたはすでに約束をしているようですが、あなたがすでに手に入れているものを単に返すことができるとき、あなたは全く新しい "約束"をたくさん作り出しています。 – deceze