我有一个称为getFormattedURI(uri)的方法,该方法接受一个URI并将其解析为网站名称和查询之类的内容。此方法将请求发送到URI,然后对响应进行处理。但是,我希望getFormattedURI(uri)之后的所有代码都等待该方法完成,因为我在以下代码中使用了该方法的返回值。它是这样的:

function getFormattedURI(uri) {
    request.get(uri).end((err, res) => {
        //(using superagent request) do stuff with res and return parsed uri
    });
}

...
let x = getFormattedURI('www.google.com');
//do stuff with x like index it into Elasticsearch


我希望我的代码等待直到收到请求的响应,而不是立即通过函数调用。我该如何实现?

最佳答案

阻塞(同步)JS线程被认为是非常糟糕的做法,您的情况非常简单直接,可以使用回调来完成。

如果您想花哨的话,可以使用promise(提供JS引擎支持promise,或者您应该使用第三方库)

使用promise的样本:

function getFormattedURI() {
    return new Promise(function(resolve, reject) {
        request.get(uri).end((err, res) => {
            //(using superagent request) do stuff with res and return parsed uri
            resolve(res);
        });
    });
}


getFormattedURI('www.google.com').then(function(res) {

})

关于javascript - 在继续执行程序之前,如何等待响应? (带有Elasticsearch的Nodejs),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37819900/

10-15 19:43