所以我想从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;
});
有什么建议吗?
答案 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);