您 只能 将Promises
用于异步功能,而不能用于其他任何功能。不要将它们当作错误的monad来使用,那会浪费资源,它们固有的异步性将使所有事情变得更加繁琐。
当您拥有同步代码时,请使用
try/
catch进行异常处理。
return new Promise(function(resolve, reject) { resolve(x / y);}).catch(err => NaN)try { return x / y;} catch(e) { return NaN;}当且仅当
你已经有承诺的代码,那么就可以避免在某些情况下:当你想例外拒绝承诺。在这些情况下,您应该只允许对promises进行内置的错误处理,而不要通过一个额外的但毫无意义的
try/
catch层使一切复杂化:
new Promise(function(resolve, reject) { try { // when used synchronous in the executor callback … resolve(somethingSynchronous()); } catch (e) { reject(e); }});new Promise(function(resolve, reject) { … resolve(somethingExceptionally());});….then(function(res) { try { … return somethingExceptionally(); } catch(e) { return Promise.reject(e); }}).…….then(function(res) { … return somethingExceptionally();}).…


