【发布时间】:2017-11-03 14:23:41
【问题描述】:
我可以使用promise将同步方法变成异步吗?
例如同步读取文件(是的有fs.readFile,它有回调):
// Synchronous read
var data = fs.readFileSync('input.txt');
我应该这样做吗:
function readFileAsync(){
return new Promise((resolve, reject) => {
try {
resolve(fs.readFileSync('input.txt'));
} catch(err) {
reject(err);
}
})
}
或使用异步/等待:
function async readFileAsync(){
try {
let result = await fs.readFileSync('input.txt');
return result;
} catch(err) {
return err;
}
})
}
【问题讨论】:
-
这样做有什么意义?
-
@YiKai 上面的例子只是例子,重点是防止阻塞。
-
@Alvin 为防止阻塞,请改用
fs.readFile! -
答案是关于防止阻塞的目的,不幸的是,你无法达到你的目标。但是您的示例在仅在同步方法中捕获错误的情况下很有用。例如,您有来自 API 的
variables和email_template并想检查它是否有效,但希望以异步方式与 promises 进行操作(因为您的架构是在 promises 上),所以这个例子将是只是这个问题的答案。
标签: node.js asynchronous promise es6-promise