BUG内容如下:
a promise was created in a handler but was not returned from it
代码:
function runAsync1() {
var p = new Promise(function (resolve, reject) {
//做一些异步操作
setTimeout(function () {
console.log('异步任务1执行完成');
resolve('随便什么数据1');
}, 1000);
});
return p;
}
function runAsync2() {
var p = new Promise(function (resolve, reject) {
//做一些异步操作
setTimeout(function () {
console.log('异步任务2执行完成');
resolve('随便什么数据2');
}, 5000);
});
return p;
}
runAsync1()
.then(function(data){
console.log(data);
runAsync2(); //错误的地方,因为没有返回数据给后面
}).catch(function(e){
console.log(e);
});
二种解决办法:
1、在错误的行的下面添加 return null
2、拿掉catch
出现异常地方的截图:


2591行,这里X为undefine,然后944行就进入了if里面了,错误警告信息就是在if里面。
如果拿掉catch,到了这一步会终止,不继续往下执行了

导致这个的警告原因:
我对上图的猜想+下面展示的图的理解: runAsync2()新开启了一Promise,这在Promise是不允许的,因为他破坏了链式的操作,如果在runAsync2()出现了异常那么将无法补货它,所以当我们启动一个then()方法的链式时候,应该禁止启动另外一个then()方法的链式操作。核心思想就是要链式调用,破坏链式的都不正确。下图是在gitHub上看到有人出现我这样的警告,它是调用somehingComplicated()出现的警告信息


我对下图的猜想+理解:他的道理跟上面的差不多,都必须要链式调用,那个人没有retrun 一个Promise的对象回来,后续的then立即调用了

请勿打我脸,哈哈哈哈哈哈
参考网址:
http://taoofcode.net/promise-anti-patterns/ (别人的截图.png的地址)
https://github.com/petkaantonov/bluebird/issues/508 (解释.png的地址)
网友评论