请问如何避免报错呢?
我应该思路就是错的, 求解决思路
var obj = {
ok: null,
cancel: null
};
function fn() {
return new Promise((resolve, reject) => {
obj.ok = resolve;
obj.cancel = reject;
});
}
fn();
obj.cancel(); // Uncaught (in promise) undefined
先直接说代码的问题,在于 Promise 没有
catch
,可以或者直接在
then
的时候指定第二个回调然后来说说这个设计思路的问题
Promise 是一次性的,也就是说,如果你调用了
resolve
或者reject
这个 Promise 会处理相关回调,然后它的生命周期就结束了。那么在这种情况下,你把resolve
和reject
赋给obj
作为属性使用,就不符合“一次性”,因为可以通过obj
多次调用。所以这个设计思路本身是有问题的然后,从你的代码我看不出来你是想干啥。Promise 用于处理异步调用,那一定是存在异步调用才需要处理,所以要从异步调用的点开始去思考。
比如,有一个
click
事件,它是一个异步调用(用户什么时候点击并不知道)。一般操作是为这个单击事件写回调,单击时触发。如果你想用 Promise,就需要在 Promise 里设置单击事件,并在这个事件触发之后,调用 Promise 的resolve
或reject
,同时,由于 Promise 是一次性的,所以还得注销这个事件,过程是这样当然这里单击事件只是为了表示异步,实际上事件处理直接用回调更方便。所以用 Promise,一定要找到你异步的起点在哪里,不然 Promise 没啥意义。
最后,如果有空可以了解下 async/await,Node 7.6 之后就完全支持了,用它以同步形式的代码写异步会方便得多。