【发布时间】:2017-06-20 21:29:12
【问题描述】:
我正在尝试用对象解析一个数组,但该数组只返回一个值。 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 ]
但是当我在accounts()中的Promise中console.log“数据”时,数组返回:
[ { key1: 'v1', key2: 'v2', key3: 'v3'},
{ key1: 'v1', key2: 'v2', key3: 'v3'},
{ key1: 'v1', key2: 'v2', key3: 'v3'} ]
有什么建议吗?
【问题讨论】:
-
scrapeModule返回什么? -
您在哪里记录
accounts()中的值?你在哪里打电话给resolve()你正在创建的第一个承诺?您似乎没有向我们展示某些代码。 -
FWIW,看起来您已经在使用 Promise,并且您创建了太多
new Promises,而您可以简单地返回您已经获得的那些。 -
抱歉不清楚。我重新制作了问题中的原始代码以使其更易于阅读。我首先用 scrapeModule 做了一个 Promise.all,然后简单地将“data”设置为 promise 返回的第一个变量。至于数据,它返回一个包含来自 html 文档的文本的数组。感谢您的简化。我已经更新了代码
标签: javascript promise