我这个promise写的哪里不对吗?
var fs = require('fs');
var promise = new Promise(function(resolve, reject) {
fs.readFile('file1.txt', 'utf-8', (err, data) => {
resolve(data);
});
})
promise.then(function(value) {
fs.readFile('file2.txt', 'utf-8', (err, data) => {
return data + value;
});
}).then(function(value) {
console.log(value) //先执行了
})
我本意是期望读取2个文件,然后打印2个文件的内容,可是似乎最后的console.log先于读取file2执行了… 请问正确的应该怎么写,看了一些promise文章也没搞明白。。。
11 回复
你的问题是那里没有return,因为Promise是链式的,所以每一个then里面都要return一下,你那个return在fs里的回调函数里面,当然不行了,异步读取什么时候完成不可控,你想获取两个的话可以用promise.all就好了
@wdwwtzy 没注意到,你直接 fs.readFile(‘2.txt’, ‘utf-8’, (err, data) => { console.log(data+value); });
这样就可以了呀…
var fs = require('fs');
var promise = new Promise(function(resolve, reject) {
fs.readFile('1.txt', 'utf-8', (err, data) => {
resolve(data);
});
})
promise.then(function(value) {
return new Promise(function(resolve, reject) {
fs.readFile('2.txt', 'utf-8', (err, data) => {
resolve(data + value);
});
});
}).then(function(value) {
console.log(value)
})
或者
var fs = require('fs');
Promise.all([
new Promise(function(resolve, reject) {
fs.readFile('1.txt', 'utf-8', (err, data) => {
resolve(data);
});
}),
new Promise(function(resolve, reject) {
fs.readFile('2.txt', 'utf-8', (err, data) => {
resolve(data);
});
})
]).then(function(value) {
console.log(value.join(""));
});