顺序执行node.js代码

时间:2018-07-05 08:59:32

标签: node.js amazon-web-services asynchronous

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 :(得分:0)

诺言未正确使用。应该始终将它们链接在一起,以提供一致的控制流和错误处理:

   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);

答案 1 :(得分:0)

您有两种选择,首先是使用Promise链:

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 () => {
    let client = await client.hydrated();
    let data = await client.query({query: x});

    console.log('data: ', data);
})().then().catch(err => {
    console.log('err: ', err);
})