0

我正在尝试运行以下函数,该函数对 URL 数组执行 request.get,然后写入数组,整个操作需要同步。但我的代码不是同步的,每次打印不同的输出:

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。

4

1 回答 1

0

接受第二个回调参数的事实request.get意味着它是基于回调的并且不支持承诺。它不会返回等待的承诺。async在返回的承诺被忽略的地方提供函数作为回调通常是没有意义的。

request-promise可以使用包来代替:

const request = require('request-promise');

...
const res = await request.get(uri); 
const buf = Buffer.from(res.body);
...
于 2018-10-15T06:34:35.923 回答