从request.get中提取值

时间:2018-12-15 12:34:23

标签: node.js

所以我想从Web api的node.js中的request.get中提取一个值。我可以在request.get函数中使用数据,但是我想将其拉出到变量中,但这似乎不起作用。

var Request = require("request");
var variable;

variable = Request.get(url, (error, response, body) => {
    if(error) {
        return console.dir(error);
    }
    var object = JSON.parse(body);
    var value = object[1];

    return value;
});

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

这是正确的格式。您需要为此安装Express

const express==require('express')
const request=require('request')
const app=express()

app.use(express.json());

request(url,(error,response,body)=>{
  if(error) return console.dir(error);
  const obj=req.body
})

答案 1 :(得分:0)

您将variable function的返回值分配给Request.get,意在分配回调的返回值。但是,回调是不同的function。您可以这样做:

var Request = require("request");
var variable;

Request.get(url, (error, response, body) => {
    if(error) {
        return console.dir(error);
    }
    var object = JSON.parse(body);
    var variable = object[1];

});

这将确保您的variable拥有正确的值。但是,如果您这样做,

Request.get(url, (error, response, body) => {
    if(error) {
        return console.dir(error);
    }
    var object = JSON.parse(body);
    var variable = object[1];
    console.log(variable);
});
console.log(variable);

您将看到第一个输出是undefined,然后,当请求完成时,输出将是正确的值。问题是Request.get调用之后的代码在请求完成之前之前运行。您可以使您的请求同步,然后系统将等待请求完成,但这是一种反模式。您需要在回调内部处理请求响应。乍一看这似乎是违反直觉的,但是一旦习惯了,就不会有任何问题。

答案 2 :(得分:0)

要获取异步调用的值,应使用Promises

您可以轻松地将通话包装在Promise中:

var Request = require("request");
var variable;

function getAsyncValue() {
    return new Promise((resolve, reject) => {
        Request.get(url, (error, response, body) => {
            if(error) {
                return reject(err);
            }
            var object = JSON.parse(body);
            var value = object[1];
            resolve(value);
       });
    });
}

然后,您可以使用异步调用并按以下方式提取结果:

getAsyncValue().then((res) => {
    variable = res;
    return variable
}).then((v) => {
    // Do your treatment with variable here ...
}).catch((err) => {
    // Handle your error case ...
});

您也可以像下面这样使用async / await

variable = await getAsyncValue().catch(err => console.log(err));
console.log(variable);