按顺序执行Node.js代码


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 开发工具包的一部分。首先执行从文件中读取数据的最后一行,然后执行此函数。我知道回调函数,但不知道如何在这里实现它,我可以得到一些帮助吗? 谢谢。

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

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

你有两个选择,首先是使用承诺链:

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

最新更新