我有以下代碼。當f2
不會報錯時它工作正常。藍鳥的未處理排斥
如果有錯誤,它會生成一個Unhandled rejection Error
。
重寫代碼以避免Unhandled rejection Error
並正確傳播到catch
在f1
的正確方法是什麼?
let Bluebird = require('bluebird'),
mkdirp = Bluebird.promisify(require('mkdirp')),
request = Bluebird.promisify(require('request')),
writeFile = Bluebird.promisify(require('fs').writeFile);
function f1() {
.........
f2(path, fileName, options).then(.....).catch(....);
}
function f2(path, fileName, options) {
p = mkdirp(path).then(request(options).then(res => {
if (res[0].statusCode === 200) {
writeFile(fileName, res[0].body);
return res[0].body;
} else {
throw new Error(res[0].statusCode + ': ' + res[0].body);
}
}));
return p;
}
在'f2',你是爲'p'分配一個值。什麼是'p',如果它不返回任何東西,你如何調用'.then()'返回值'f2'? – JLRishe 2015-03-08 19:48:11
@JLRishe對不起,我介紹了一個修正代碼的錯誤。現在修好。 – krl 2015-03-08 19:50:28
值得一提的是,在幾周內即將發佈的藍鳥3.0版本中,您將會收到警告 – 2015-03-08 21:23:13