繁体   English   中英

从request.get中提取值

[英]Pulling a value from request.get

所以我想从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;
});

有什么建议吗?

这是正确的格式。 您需要为此安装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
})

您可以为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调用之后的代码在请求完成之前运行。 您可以使您的请求同步,然后系统将等待请求完成,但这是一种反模式。 您需要在回调内部处理请求响应。 起初这似乎是违反直觉的,但是一旦习惯了,就不会有任何问题。

要获得异步调用的值,应使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM