如何链接 q.nfcall 同步
How to chain q.nfcall syncronous
我读了一些教程,但我不明白如何链接各种承诺来读取文件,但一个接一个,我认为这很容易,但我不明白。
想法是打开一个文件,读取另一个文件的文件名,打开那个文件,然后启动 express 服务器。我得到了这样的东西,但我觉得我做的不是很好,它工作但我不喜欢它。
我的代码如下所示:
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();
您可以通过从 .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();
Errors/exceptions 也将沿链传播。
编辑: 如果你想错误读取 file1.txt
不传播,而是以不同的方式处理(而不是创建文件),你可以使用像这样:
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) {
...
});
(也许可以做得更简洁)
我读了一些教程,但我不明白如何链接各种承诺来读取文件,但一个接一个,我认为这很容易,但我不明白。
想法是打开一个文件,读取另一个文件的文件名,打开那个文件,然后启动 express 服务器。我得到了这样的东西,但我觉得我做的不是很好,它工作但我不喜欢它。
我的代码如下所示:
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();
您可以通过从 .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();
Errors/exceptions 也将沿链传播。
编辑: 如果你想错误读取 file1.txt
不传播,而是以不同的方式处理(而不是创建文件),你可以使用像这样:
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) {
...
});
(也许可以做得更简洁)