我正在尝试运行以下函数,该函数执行request.get到URL的数组,然后写入数组,整个操作需要同步。但是我的代码不是同步的,每次都会输出不同的输出:
var arrayPart = [];
fileDecode : async function(fileName,filePath){
for (a=0; a< arr.length; a++){
var partID = JSON.parse(arr[a].id)
var uri = listID[remainder]+'/download/'+'?id='+partID
await request.get(uri, this.onRequestDone);
}
onRequestDone: async function(err, resp, body){
await new Promise(function (resolve, reject) {
if(err){
reject(err)
}else{
const buf = Buffer.from(body)
console.log("buf", buf)
arrayPart.push(buf);
fs.writeFileSync('message.txt', arrayPart)
resolve(body)
}
});
}
}
我的onRequestDone函数无法正常运行,并且打印buff的方式有所不同。
答案 0 :(得分:0)
request.get
接受第二个回调参数的事实意味着它基于回调并且不支持promise。它没有返回等待的承诺。在忽略返回的promise的地方提供async
函数作为回调通常是没有意义的。
request-promise
软件包:
const request = require('request-promise');
...
const res = await request.get(uri);
const buf = Buffer.from(res.body);
...