Последовательно выполнить код node.js - PullRequest
0 голосов
/ 05 июля 2018
client.hydrated().then(function (client) {
   client.query({ query: x})
       .then(function logData(data) {
           console.log('results of query: ', data);
           fs.writeFileSync('notesdata.json', JSON.stringify(data))
       })
       .catch(console.error);`enter code here`
});

var xy=fs.readFileSync('notesdata.json');

Это часть AWS SDK. Последняя строка, которая читает данные из файла, выполняется первой, а эта функция выполняется позже. Я знаю о функциях обратного вызова, но не знаю, как реализовать это здесь, могу ли я получить некоторую помощь. Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

у вас есть два варианта, во-первых, используйте цепочку обещаний:

let initClient = () => {
    return new Promise((resolve, reject) => {
        client.hydrated().then(function (client) {
            resolve(client);
        }).catch(err => reject(err))
    })
}

let query = (client) => {
    return new Promise((resolve, reject) => {
        client.query({query: x}).then((data) => {
            fs.writeFileSync('notesdata.json', JSON.stringify(data))
            resolve()
        }).catch(err => reject(err))
    });
};

initClient().then(query).then(() => {
    var xy=fs.readFileSync('notesdata.json');
}).catch(err => {
    console.log('err: ', err);
})

если вы используете async, дождаться кода гораздо проще:

(async () => {
    let client = await client.hydrated();
    let data = await client.query({query: x});

    console.log('data: ', data);
})().then().catch(err => {
    console.log('err: ', err);
})
0 голосов
/ 05 июля 2018

Неправильно использованы обещания. Они всегда должны быть объединены в цепочку для обеспечения согласованного потока управления и обработки ошибок:

   client.hydrated().then(function (client) {
      return client.query({ query: x})
   })
   .then(function logData(data) {
       console.log('results of query: ', data);
       fs.writeFileSync('notesdata.json', JSON.stringify(data))
       // no real need to read it from file because it's already available as `data`
       var xy=fs.readFileSync('notesdata.json');
   })
   .catch(console.error);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...