关于promise的回调取参问题。
自己仿照promise的标准造轮子。封装一个read文件的方法。想让其返回一个promise。但是通过回调拿到的数据不知道如何暴露给外部比较好。
function readFile_t(url, encoding,getter) {
var promise;
var getter = getter;
require('fs').readFile(url, encoding,
(err, data) => {
this.promise = new Promise((resolve, reject) => {
resolve(data)
})
this.getter = this.promise;
});
}
var file1,file2;
//这里外部的file1,file2是拿不到promise对象的
readFile_t("sysConfig.js", "utf-8", file1)
readFile_t("utf8.js", "utf-8",file2)
deffered2.all(file1, file2).then((result) => {
console.dir(result)
})
我已经发现我的写法是拿不到promise的了,如果我想通过回调拿到promise对象,应该如何实现呢?求大神解答!!
13 回复
function readFile_t (url, encoding) {
return new Promise( (resolve, reject) => {
require('fs').readFile(url, encoding, (err, data) => {
if (err) {
return reject(err)
}
return resolve(data)
})
})
}
@Asher-Tan 脑回路怎么就想到用回调返回promise了呢,太感谢您了
getter应该传入一个函数callback,然后在里面callback(getter)
@dislido 之前是这么写的
function readFile_t(url, encoding,cb) {
var promise;
require('fs').readFile(url, encoding,
(err, data) => {
this.promise = new Promise((resolve, reject) => {
resolve(data)
})
cb(this.promise)
});
}
可是我的目的还是直接拿到promise对象,这样去做最后还是得从回调去取。最终外部直接拿还是没拿到。。。
async function readFile_t(url, encoding) {
return require('fs').readFileSync(url, encoding);
}
node8还有一个更粗暴的
const readFile_t = require('util').promisify(require('fs').readFile);
return new Promise
读取文件的话为什么不用fs extra?
@dislido … async 里面用 readFileSync …
你的代码是因为在里面没有 return promise
可以看下这块的社区优秀类库 https://www.npmjs.com/package/mz 的源码
const fs = require('mz/fs');
await fs.readFile('path/to/your/file');
@2linziyi2 写文件只是为了写一个实现,我只是尝试在做一个promise的流程
@dislido 我前两天也是看到node8的,越来越粗暴
@atian25 是的,思路断片了,没得想到把promise放到外层去返回
@atian25 嗯嗯,谢谢了