正しく記憶されている場合Promise.catch()を使用してそのエラーを処理できるように、常に約束がスローされるとエラーが発生するはずです。私は何か例外を思い出しませんが、内部でエラーを投げるときsetTimeout()
これは何とか動作しません。エラーが正しくキャッチされないという約束NodeJS
これはなぜ機能しないのか誰かが説明できますか?それともNodeJSのバグですか?
テストコード
// This works!
function async() {
return new Promise(function (resolve, reject) {
throw new Error('test');
});
}
async().catch(function() {
console.log('Ok: 1');
});
// This doesn't work..
function async_fail() {
return new Promise(function (resolve, reject) {
setTimeout(function() {
throw new Error('test');
}, 1);
});
}
async_fail().catch(function() {
console.log('Ok: 2');
});
なぜあなたは '約束内setTimeout'必要がありますか...あなたならば'BlueBird'を使用していますが、' .delay'はうまく動作しませんか? http://bluebirdjs.com/docs/api/promise.delay.html –
@DavidEspinoあなたが正しいですが、私が使用するnpmパッケージの1つが '' 'setTimeout'''を使用している場合はどうなりますか? '' Promise.catch'''がトリガしないので、私のコードはクラッシュするでしょう:/私はこれが起こったことを知りたいのです。 –
そして、あなたは 'setTimeout'が実行するものを制御できません。もしあなたが私がそれが正しいかどうか、あるいはその機能の中で約束を「解決する」か「拒否する」と思っているのでしょうか?このhttp://stackoverflow.com/questions/22707475/how-to-make-a-promise-from-settimeout ...を参考にしてみてください。たぶん役立つでしょう... 'npm'パッケージのほとんどは'コールバック'ベースなので...' setTimeout'を内部的に実行するパッケージを持っていると思います... 95%が 'callback'オプションを持っていると確信しています...もしそうでなければ... IMHOはbaaaadのnpmパッケージです:) ... –