Node.js承诺链接
我是 Node.js 的新手,能够使用 promise 一一运行这些命令:
let promise1 = new Promise(function (resolve, reject) {
sftp.connect({
host: host,
username: user,
privateKey: fs.readFileSync(pemfile)
}).then(() => {
return sftp.get(remotePath, fs.createWriteStream(localPath)); //This writes from a remote file to a local file
}).then(() => {
sftp.end();
resolve();
})
.catch(err => {
console.error(err.message);
reject(err);
});
});
await promise1;
let promise2 = new Promise(function (resolve, reject) {
fs.readFile(localPath, 'utf8', function (err, data) {
if (err) {
reject(err);
}
resolve(data);
});
});
let data = await promise2;
这有效,但我知道这不是最好的方法。有一个更好的方法吗?
回答
await可以直接与像sftp.connect,一样返回 promise 的方法一起使用sftp.get,sftp.end因此您可以直接使用它,该函数将等待该步骤完成。仅fs.readfile不返回 Promise 但我们可以调用fs.promises.readFile()它返回然后我们可以使用await.
代码可以简化:
try {
await sftp.connect({
host: host,
username: user,
privateKey: fs.readFileSync(pemfile)
})
await sftp.get(remotePath, fs.createWriteStream(localPath));
await sftp.end();
let fileData = await fs.promises.readFile(localPath, 'utf8');
console.log(fileData);
} catch (error) {
console.error(error.message);
}
添加了 try-catch 块以捕获任何操作的错误。