以下代码的原因是摆脱callback hell
/ pyramid of doom
。我还没有完全理解i/o blocking
。
'use strict';
var fs = require('fs');
var co = require('co');
co(function* () {
var fileName = 'readme.txt';
var str =
yield new Promise(function (resolve, reject) {
var result;
try {
result = fs.readFileSync(fileName, 'utf8');
} catch (err) {
reject(err);
}
resolve(result);
});
console.log('result readFileSync: ' + str);
});
诚实地说,我所期待的只是yes
或no
答案。如果没有人可以提供一些细节,我会完全希望能够正确地学习JavaScript同步/异步以及如何利用Promise的力量。
答案 0 :(得分:5)
没有
如果要包装文件读取操作,请尝试尽可能使用节点功能的异步版本。将readFileSync
与promise相比,使用readFileSync
比使用readFileSync
没有优势,因为readFile
会阻止该过程,直到它完成读取,'use strict';
var fs = require('fs');
var readFilePromise = function(file) {
return new Promise(function(ok, notOk) {
fs.readFile(file, function(err, data) {
if (err) {
notOk(err)
} else {
ok(data)
}
})
})
}
readFilePromise('/etc/passwd').then(function(data) {
// do something with the data...
})
没有。
因此,更好的解决方案是这样的:
data
答案 1 :(得分:4)
正确的方法是使用Node的 native util库并提供fs.readFile
:
const path = require('path');
const fs = require('fs');
const INDEX = path.join(__dirname, 'app', 'index.html');
const readFile = require('util').promisify(fs.readFile);
readFile(INDEX)
.then(e => console.log(e.toString()))
.catch(e => console.log('FOOBAR ' + e));
结果:
one@dolphin:~/github/resume $ node toolchain/inject.js
FOOBAR Error: ENOENT: no such file or directory, open '/home/one/github/resume/toolchain/app/index.html'