我如何在node.js中将npm请求模块与bluebird一起使用

时间:2018-08-22 16:53:16

标签: javascript node.js request bluebird

webCheck.js

var request = require("request");
var Promise = require("bluebird");



module.exports = {
    check : function(address){
        var length;
        request(address).on('response',function(response){
        response.on('data',function(data){
            length = data.length;
            console.log("in : ",length); //  
        })
    });
    console.log("out : ",length);
    return length;
}
}


main.js

var webCheck = require('./webCheck.js');

    module.exports = {
    run : function(){
        console.log("result : ",webCheck.check("http://localhost:3000/status"));
        ...


终端

out :  undefined
result :  undefined
in : 821

我想检查网站的长度。但是,检查网站的功能不同步。

我想在请求完成后返回长度。

我该怎么办?我想使用bluebird模块。

1 个答案:

答案 0 :(得分:0)

为了能够将request模块与bluebird promises一起使用,documentation建议安装request-promise。因此,在安装request之后,还要安装npm install request-promise

然后,您必须确保check函数返回此承诺,以便调用方可以等待其结果:

var request = require("request-promise");

module.exports = {
    check : function(address) {
        return request(address)
            .on('response', function(response) {
                return response;
            });
    }
}

最后,在可以使用结果之前,main.js中的调用需要等待promise解析:

var webCheck = require('./webCheck.js');

module.exports = {
    run : function() {
        webCheck.check("http://localhost:3000/status").then(function(response) {
            console.log(response);
        });
    }
    ...
}