Await - Async не делает функцию синхронной в поведении - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь запустить следующую функцию, которая выполняет 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 работает неправильно и печатает бафф по-разному.

1 Ответ

0 голосов
/ 15 октября 2018

Тот факт, что request.get принимает второй аргумент обратного вызова, означает, что он основан на обратном вызове и не поддерживает обещания.Это не возвращает обещание ждать.Как правило, нет смысла предоставлять async функцию в качестве обратного вызова в тех местах, где возвращаемое обещание игнорируется. Вместо этого можно использовать пакет

request-promise:

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

...
const res = await request.get(uri); 
const buf = Buffer.from(res.body);
...
...