我对Promise警告信息的理解a promise was created in a handler but was not returned from it

BUG内容如下:
a promise was created in a handler but was not returned from it
代码:

//异步请求1
function runAsync1() {
         var p = new Promise(function (resolve, reject) {
         //做一些异步操作
         setTimeout(function () {
         console.log('异步任务1执行完成');
         resolve('随便什么数据1');
         }, 1000);
         });
         return p;
         }

//异步请求2
   function runAsync2() {
         var p = new Promise(function (resolve, reject) {
         //做一些异步操作
         setTimeout(function () {
         console.log('异步任务2执行完成');
         resolve('随便什么数据2');
         }, 5000);
         });
         return p;
         }

     var promise =  runAsync1()
                       .then(function(data){
                           console.log(data);
                                   runAsync2(); 
                                  return null;//1、解决成功,这个办法不是很好
                       }).catch(function(e){
                           console.log(e);
                       });
    办法3:
    promise.then(function() {
              runAsync2(); 
    });   
    
   办法4:
    runAsync1()
           .then(function(data){
               reurn runAsync2();  
           }).catch(function(e){
                console.log(e);
           });

二种解决办法:
1、在错误的行的下面添加 return null (这个办法不是很好)
2、拿掉catch (这个办法不是很好)
3、拿着原来的promise,继续then
4、都return一下

出现异常地方的截图:


我对Promise警告信息的理解a promise was created in a handler but was not returned from it_第1张图片
错误1.png

我对Promise警告信息的理解a promise was created in a handler but was not returned from it_第2张图片
错误2.png

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


我对Promise警告信息的理解a promise was created in a handler but was not returned from it_第3张图片
终止了.png

导致这个的警告原因:
我对上图的猜想+下面展示的图的理解:首先要知道Promise都是循环调用then(),由上一个then()调用下一个then(),这是一个链式规则

runAsync1.then(){
   runAsync2(); //这里没有return 一个then,所以为导致错误
}.catch(function(e){
})

当你 return runAsync2();就可以结束错误了,如果你的runAsync1是最后一个then,那么就可以不用继续return了,也不会报错。
核心思想就是要链式调用,破坏链式的都不正确。下图是在gitHub上看到有人出现我这样的警告,它是调用somehingComplicated()出现的警告信息

我对Promise警告信息的理解a promise was created in a handler but was not returned from it_第4张图片
别人的解读.png

我对Promise警告信息的理解a promise was created in a handler but was not returned from it_第5张图片
别人的截图2.png

我对下图的猜想+理解:他的道理跟上面的差不多,都必须要链式调用,那个人没有retrun 一个Promise的对象回来,后续的then立即调用了
我对Promise警告信息的理解a promise was created in a handler but was not returned from it_第6张图片
解释.png

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

感觉这篇博客还是没写好,后面有时间,我再重稿一次

你可能感兴趣的:(我对Promise警告信息的理解a promise was created in a handler but was not returned from it)