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.getsftp.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 块以捕获任何操作的错误。


以上是Node.js承诺链接的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>