在多个之后返回promise,然后返回undefined

时间:2019-03-29 10:26:17

标签: javascript es6-promise

我有一种方法可以调用执行axios get请求的服务。这将返回一个Promise.I然后调用.then并返回响应。当我打电话给loadData时,我得到了一个承诺。

loadData(){
      return myService.getData().then(response=>{              
            //do some stuff
                return response;                  
        })
   }

当我打电话

Promise.all([loadData()]).then(function([data]){
  console.log([data])
}

console.log显示了我通过服务加载的数据。

如果我将loadData方法更改为以下内容-那么Promise.all登录到控制台后,我将变得未定义。

loadData(){
      return myService.getData().then(response=>{              
            //do some stuff                                      
        }).then(res =>{
            //do more stuff
            return res;
        }
   }

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

履行处理器的返回值是下一个履行处理器的输入(或承诺输入)。根据您的描述,您不会返回setInterval(() => { this.loading = true; this.getSignals(); }, 60000);所在的任何地方:

//do some stuff

调用不返回任何内容的函数会导致loadData(){ return myService.getData().then(response=>{ //do some stuff return /*something appropriate*/; // <=========================== }).then(res =>{ // <=== it will come through here //do more stuff return res; }); // <========== Added missing ); here } ,因此这就是undefinedres的原因。

旁注:您不需要两个履行处理程序(undefined处理程序),除非您在第一个处理程序中返回的是承诺(或其他可兑现的处理程序)。