我想知道使用promises处理长函数错误的最佳方法是什么?
我的功能:
module.exports = function(data) {
var deferred = Q.defer();
var config = {};
fs.readdir(path, function(err, files) {
if (err) {
deferred.reject(new Error(err));
}
var infoPath = false;
files.forEach(function(filename) {
if (filename.indexOf('.info') !== -1) {
infoPath = path + '/' + filename;
config['moduleName'] = filename.replace('.info', '');
}
});
if (!infoPath) {
deferred.reject(new Error('Did not find .info-file'));
}
if (files.indexOf(config['moduleName'] + '.module') > -1) {
config.type = 'Modules';
}
else {
deferred.reject(new Error('Unknown project type'));
}
// Parse the info file.
fs.readFile(infoPath, function (err, content) {
if (err) {
deferred.reject(new Error(err));
}
data.config = config;
data.infoContent = content.toString();
deferred.resolve(data);
});
});
return deferred.promise;
};
据我所知,这是使用Q.defer的方法。但是如果抛出错误,我不希望/需要它来尝试其余的功能。我错过了什么或者有更好的方法吗?
答案 0 :(得分:1)
拒绝承诺不会奇迹般地阻止函数执行其余的代码。所以在拒绝之后,你应该从函数返回:
if (err) {
deferred.reject(new Error(err));
return;
}
或更短:
if (err) {
return deferred.reject(new Error(err));
}