我正在使用解压缩功能来解压缩打字稿(angular2)中来自API的压缩响应。
customers:any=[];
zlib.gunzip(Buffer.from(response), function(err, uncompressedMessage)
{
if(err)
{
console.log(err);
}
else
{
resultArray = JSON.parse(uncompressedMessage.toString());
consloe('response After Unzip within fun',resultArray);
this.customers = resultArray; // error undefined
}
});
console('response After Unzip outside fun',resultArray); // undefined
在这里,resultArray仅可在函数内部访问,而不能在外部访问。我尝试声明全局变量并对其进行访问,但无法访问该值。因此,建议我如何实现此目标。
答案 0 :(得分:0)
问题是function(err, uncompressedMessage) {}
是异步的。而且您正在尝试设置resultArray
之前对其进行访问。
您可以做的是将解压缩功能包装在一个返回Promise
的函数中,如下所示:
let uncompress = (response) => new Promise((resolve, reject) => {
zlib.gunzip(Buffer.from(response), function(err, uncompressedMessage) {
if(err) {
reject(err);
} else {
let resultArray = JSON.parse(uncompressedMessage.toString());
resolve(resultArray);
}
});
});
完成后,当您收到回复时,您可以使用:
const customers = await uncompress(response); // not undefined anymore
请注意,使用await
关键字的方法必须声明为async
。如果您不想这样做,则可以这样使用普通的Promise
:
uncompress(response).then(function(customers){ /* logic */ })
别忘了使用bind(this)
这样回调
uncompress(response).then(function(customers){ /* logic */ }.bind(this))