javascript await关键字,未返回预期值

时间:2017-04-12 14:09:44

标签: javascript node.js ecmascript-2017

我正在尝试模拟一个http2请求对象,以便测试我对它的使用。我现在在节点版本7.8.0上,所以我想我会尝试使用异步并等待做事。

我为http2创建了一个模拟类(尽管它叫做HTTP),如下所示: -

class HTTP {
    constructor() {
      this.version = HTTP.version + 1;
      HTTP.version = this.version;
    }
    request(options, callback) {
      let self = this;
      this.callback = callback;
      this.options = options;
      this.endPromise = new Promise(resolve => {
        self.endResolver = resolve;
      });
      return {end: this.requestEnd.bind(this)};
    }
    requestEnd(stringParams) {
      let params = JSON.parse(stringParams);
      if (this.endResolver) {
console.log('About to resolve params ', params);
        this.endResolver(params);
      }
    }
    async requestEndDone(params,status) {
      let p2 = await this.endPromise;
console.log('End Promise with ', p2);
      this.responseObject = new EventEmitter();
      if (status) {
        this.responseObject.statusCode = status;
      } else {
        this.responseObject.statusCode = 200;
      }
      this.callback(this.responseObject);
      if (params) {
        let body = JSON.stringify(params);
        while (body.length > 0) {
          let chunkSize = Math.floor(Math.random() * 20) + 10;
          let chunk = body.substring(0,chunkSize);
          body = body.substring(chunkSize);
          this.responseObject.emit('data', chunk);
        }
      }
      this.responseObject.emit('end');
    }
  }
  HTTP.version = 0;

重要的部分是this.endPromise;当我测试的代码调用request.end时我解析它,然后使用异步函数requestEndDone我的测试脚本可以等待它完成,因为知道然后发生了请求回调并且可以检查结果。< / p>

我遇到的问题略微远离主要测试推力。 两条console.log行会产生不一致的结果。

About to resolve params  { pid: 1234 }
End Promise with  undefined

是否在控制台上显示了什么。我认为await返回了承诺解决的值,但在这种情况下它不会..为什么?

0 个答案:

没有答案