class 异步方法中的节点设置 this.var
node setting this.var inside class async method
我正在创建一个节点 js class 以在我的应用程序中使用,该应用程序使用 restful API。为了达到 API 我正在使用节点 pckg 请求。
var request = require('request');
class Test{
constructor(){
this.var = {};
}
async getVar(){
request.get(url, function(err, resp, body) {
if (!err) {
var res = JSON.parse(body);
this.var = res.var;
console.log(res.var);
} else {
console.log(err);
}
});
}
getVarResult(){
return this.var;
}
}
在 get 请求中,我可以打印 console.log 中的变量,结果显示正常。但是在执行 getVar()
方法后,如果我调用 getVarResult()
它会一直返回 undefined
或 empty
.
我知道我可能正在做的是在其余的上下文中设置它而不是重新分配给构造函数 class.
上的 this.var
我怎样才能做我想做的事?我可以在 get 请求方法中设置一个 var,将其设置为 class 级别并且可以通过 getter 类型方法访问吗?
Request 不能 return Promise 本身,但你可以将它包装在 Promise 中来解决这个问题,而不需要像 request-promise-native
这样的包
async getVar() {
return new Promise((resolve, reject) => {
request.get(
url,
(err, resp, body) => {
if (!err) {
var res = JSON.parse(body);
this.var = res.var;
console.log(res.var, "resVar");
resolve(true);
} else {
console.log(err);
reject(err);
}
}
);
});
}
例如在你的函数中:
app.get("/", async (req, res) => {
const TestInstance = new Test();
await TestInstance.getVar();
console.log(TestInstance.getVarResult(), "It Works");
});
我正在创建一个节点 js class 以在我的应用程序中使用,该应用程序使用 restful API。为了达到 API 我正在使用节点 pckg 请求。
var request = require('request');
class Test{
constructor(){
this.var = {};
}
async getVar(){
request.get(url, function(err, resp, body) {
if (!err) {
var res = JSON.parse(body);
this.var = res.var;
console.log(res.var);
} else {
console.log(err);
}
});
}
getVarResult(){
return this.var;
}
}
在 get 请求中,我可以打印 console.log 中的变量,结果显示正常。但是在执行 getVar()
方法后,如果我调用 getVarResult()
它会一直返回 undefined
或 empty
.
我知道我可能正在做的是在其余的上下文中设置它而不是重新分配给构造函数 class.
上的this.var
我怎样才能做我想做的事?我可以在 get 请求方法中设置一个 var,将其设置为 class 级别并且可以通过 getter 类型方法访问吗?
Request 不能 return Promise 本身,但你可以将它包装在 Promise 中来解决这个问题,而不需要像 request-promise-native
这样的包async getVar() {
return new Promise((resolve, reject) => {
request.get(
url,
(err, resp, body) => {
if (!err) {
var res = JSON.parse(body);
this.var = res.var;
console.log(res.var, "resVar");
resolve(true);
} else {
console.log(err);
reject(err);
}
}
);
});
}
例如在你的函数中:
app.get("/", async (req, res) => {
const TestInstance = new Test();
await TestInstance.getVar();
console.log(TestInstance.getVarResult(), "It Works");
});