带有请求承诺的异步/等待返回未定义 [英] Async/Await with Request-Promise returns Undefined
问题描述
我有两个文件; server.js和scrape.js,以下是当前代码段.
I have two files; server.js and scrape.js, below are the code snippets as they currently stand.
server.js:
server.js:
const scrape = require("./scrape");
async function start() {
const response = await scrape.start();
console.log(response);
}
start();
和scrape.js:
and 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),当我实际上要返回我一直推入的数组时,你能看到我要去哪里了吗?/p>
So when I spin up server.js, I return undefined to the console.log(response), when I actually want to return the array i've been pushing to, can you see where I'm going wrong?
推荐答案
您需要return
您的async
函数中的内容(a内的return不会从主函数中返回).诺言或您await
编辑过的东西.
You need to return
something from your async
function (a return inside a then does not return from the main function). Either a promise or something you await
-ed.
此外,请确保声明您的go
变量,以避免将其泄漏到全局空间中.
Also, make sure to declare your go
variable to avoid leaking it into the global space.
const go = async () => {
const options = {
uri: "http://www.somewebsite.com/something",
transform: function(body) {
return cheerio.load(body);
}
};
return 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);
});
};
由于使用的是async
函数,因此您可能还想利用await
语法.
Since you are using an async
function, you might want to take advantage of the await
syntax also.
const go = async () => {
const options = {
uri: "http://www.somewebsite.com/something",
transform: function(body) {
return cheerio.load(body);
}
};
try {
const $ = await request(options);
$(".some-class-in-html").each(function(i, obj) {
const data = $(this)
.text()
.trim();
scrapeTitleArray.push(data);
});
return scrapeTitleArray;
}
catch (err) {
console.log(err);
}
};
这篇关于带有请求承诺的异步/等待返回未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!