我在节点8.10中执行以下操作,并且不明白为什么它不会等待承诺得到解决:
根调用就像这样
searcher.queryByName(companyname, (err, companies) => {
if (err) {
logger.error(`Searcher Error during ${provider} Search for ${companyname} ${JSON.stringify(body)}`, err);
res.sendStatus(500);
}
else {
res.set('Content-Type', 'application/json');
logger.info(`Searcher Found ${companies.length} results for queryByName search for provider ${provider}`);
const json = JSON.stringify(companies);
res.send(json);
}
});
在搜索者里面我有这个
async queryByName(name, cb) {
try {
const pageUrlOptions = {
url: pageURL,
timeout: 30000,
encoding: null
};
const response = await Requestor.sendHttpRequest(pageUrlOptions);
if (response.statusCode === 200) { cb(false, "Result"); }
else { cb(response.statusCode); }
} catch(e) {
cb(err);
}
}
请求者中的方法如下所示:
static async sendHttpRequest(options) {
if (!options.timeout) options.timeout = 30000;
request(options, (err, response) => {
if( err ) { throw err; }
else { return response; }
})
}
会发生什么:
TypeError: Cannot read property 'statusCode' of undefined
如果我将方法更改为:
static async sendHttpRequest(options) {
return new Promise((resolve, reject) => {
if (!options.timeout) options.timeout = 30000;
request(options, (err, response) => {
if( err ) { reject(err); }
else { resolve(response); }
})
});
}
有效。
我认为异步声明的函数会自动将返回和错误抛出到Promise中,我不需要构造函数,但为什么这在这种情况下不起作用?是因为我在根函数中使用回调吗?