节点在类异步方法中设置this.var

时间:2019-02-16 14:26:46

标签: javascript node.js request npm-request

我正在创建要在我的应用中使用的js节点类,该类消耗了宁静的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(),它将继续返回undefinedempty

我知道我可能正在做的事情是在其余上下文中进行设置,而不是在构造函数类上重新分配给this.var

我该怎么办?我可以在get request方法内设置一个var,以将其设置为类级别,并可以通过getter类型方法进行访问吗?

1 个答案:

答案 0 :(得分:1)

请求不能自行返回Promises,但是您可以将其包装在Promise中以解决此问题,而无需像request-promise-native这样的包

    @Override
public void onEvent(Event event) {
    String userId = event.getUserId();
    RealmModel realm = session.realms().getRealm(event.getRealmId());
    UserModel user = session.users().getUserById(userId, realm);

    // get all attributes
    Map<String, List<String>> allAttributes = user.getAttributes(); // or
    // get Attribute by name
    String attrubute = user.getFirstAttribute("attributename");
}

例如在您的函数中:

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);
          }
        }
      );
    });
  }