我阅读了一些教程,但我不明白如何将各种承诺链接到读取文件但是一个接一个,我觉得它很容易,但我不明白。
想法是打开一个文件,读取另一个文件的文件名,打开该文件然后启动快速服务器。我有类似的东西,但我认为我的确不是很好,它的工作,但我不喜欢它。
我的代码如下所示:
Q.nfcall(fs.readFile, path.resolve(__dirname, './config/db/default.connection.json'), "utf-8")
.then(function(data){ ...
/*HERE I OPEN OTHER 'Q' PROMISE FOR READ OTHER FILE AND START SERVER*/
Q.nfcall(..). then(function(data2){ ... })
.catch(function(err){.. });
}). fail(function(err){...})
.done();
})
.catch(function(err) { ...});
})
.fail(function(err) {.. })
.done();
答案 0 :(得分:2)
您可以通过从.then()
处理程序
Q.nfcall(fs.readFile, 'file1.txt').then(function(data1) {
console.log('file 1 read');
return Q.nfcall(fs.readFile, 'file2.txt'); // return a new promise
}).then(function(data2) {
console.log('file 2 read');
}).catch(function(err) {
...
}).done();
错误/异常也将沿着链传播。
编辑:如果您希望错误阅读file1.txt
不传播,而是以不同方式处理(改为创建文件),您可以使用以下内容:< / p>
Q.nfcall(fs.readFile, 'test1.txt', 'utf-8').then(null, function(err) {
// create an empty file (or whatever)
return Q.nfcall(fs.writeFile, 'test1.txt', '').then(function() {
return Q.nfcall(fs.readFile, 'test1.txt', 'utf-8');
});
}).then(function(data) {
console.log('data 1', data);
return Q.nfcall(fs.readFile, 'test2.txt', 'utf-8');
}).then(function(data) {
console.log('data 2', data);
}).catch(function(err) {
...
});
(可能更简洁)