等待-异步不会使功能在行为上同步

时间:2018-10-15 06:26:12

标签: node.js async-await node-request

我正在尝试运行以下函数,该函数执行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的方式有所不同。

1 个答案:

答案 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);
...