我试图模拟一个 http2 请求对象的 but 以测试我对它的使用。我现在在节点版本 7.8.0 上,所以我想我会尝试使用 async 和 await 来做事。
我为 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
我的测试脚本可以等待它的完成,知道然后请求回调已经发生并可以检查结果。
我遇到的问题与主要测试重点稍有不同。这两console.log
行给出了不一致的结果。
About to resolve params { pid: 1234 }
End Promise with undefined
是控制台上显示的内容。我认为await
返回了承诺解决的值,但在这种情况下它没有......为什么?