等待在这种情况下不等待来自异步函数的promise promise

时间:2018-05-17 10:22:00

标签: node.js promise es6-promise

我在节点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中,我不需要构造函数,但为什么这在这种情况下不起作用?是因为我在根函数中使用回调吗?

0 个答案:

没有答案