你必须创建一个异步函数返回一个承诺或使用一个承诺库像bluebird.js
香草JS
var promise = readFileAsync();
promise.then(function(result) {
// yay! I got the result.
}, function(error) {
// The promise was rejected with this error.
}
function readFileAsync()
{
var promise = new Promise.Promise();
fs.readFile("somefile.txt", function(error, data) {
if (error) {
promise.reject(error);
} else {
promise.resolve(data);
}
});
return promise;
}
随着BlueBird.js
var Promise = require("bluebird");
var fs = Promise.promisifyAll(require("fs"));
fs.readFileAsync("myfile.json").then(JSON.parse).then(function (json) {
console.log("Successful json");
}).catch(SyntaxError, function (e) {
console.error("file contains invalid json");
}).catch(Promise.OperationalError, function (e) {
console.error("unable to read file, because: ", e.message);
});
' readFile'不会返回一个承诺,为什么你认为它呢? – Bergi
我正在尝试base64加密的文件,因为你可以看到,但我是承诺的新手。那么处理这种情况的理想是什么? – Mithun
@Mithun你按照[这里](https://nodejs.org/api/fs.html#fs_fs_readfile_filename_options_callback)所述的回调传递也是“但我对承诺是新的”,也许,但是再次没有承诺这里。 –