Я пытаюсь разрешить массив с объектами, но массив возвращается только с одним значением. 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;
Я регистрирую результат обещания с помощью этого кода в другом модуле. Я хочу, чтобы возвращаемое значение из функции будет массив со значениями:
accounts(url, link)
.then(function(data) {
console.log(data)
}); -- > //[ undefined ]
Но когда я console.log «данные» в Promise на счетах(), то возвращает массив:
[ { key1: 'v1', key2: 'v2', key3: 'v3'},
{ key1: 'v1', key2: 'v2', key3: 'v3'},
{ key1: 'v1', key2: 'v2', key3: 'v3'} ]
Какие-либо предложения?
И что возвращает 'scrapeModule'? –
Где вы регистрируете значение в 'accounts()'? Где вы вызываете 'resolve()' для этого первого обещания, которое вы создаете? Кажется, есть код, который вы нам не показываете. – JLRishe
FWIW, похоже, вы уже работаете с обещаниями, и вы создаете слишком много «новых обещаний», когда можете просто вернуть те, которые у вас уже есть. – deceze