【发布时间】:2018-04-30 16:43:03
【问题描述】:
我有两个文件; server.js 和 scrape.js,下面是他们目前的代码 sn-ps。
server.js:
const scrape = require("./scrape");
async function start() {
const response = await scrape.start();
console.log(response);
}
start();
和scrape.js:
const cheerio = require("cheerio");
const request = require("request-promise");
go = async () => {
const options = {
uri: "http://www.somewebsite.com/something",
transform: function(body) {
return cheerio.load(body);
}
};
request(options)
.then($ => {
let scrapeTitleArray = [];
$(".some-class-in-html").each(function(i, obj) {
const data = $(this)
.text()
.trim();
scrapeTitleArray.push(data);
});
return scrapeTitleArray;
})
.catch(err => {
console.log(err);
});
};
module.exports = {
start: go
};
所以当我启动 server.js 时,我将 undefined 返回到 console.log(response),当我实际上想要返回我一直推送到的数组时,你能看到我哪里出错了吗?
【问题讨论】:
-
不应该“去”返回一个承诺吗?
-
@McMurphy 如果我没记错的话,将其声明为异步函数会自动返回一个承诺?
-
.each()使用“回调”。您需要将其包装在一个承诺中并解决它的结果。否则代码直接跳到返回空数组。您当然需要returnrequest结果,但如果您不尊重回调,那么您仍然会遇到问题。 -
go是一个implicitly global variable。不要那样做。 -
为什么你将
go定义为async函数却没有使用await?
标签: javascript node.js asynchronous async-await cheerio