Javascript 重用承诺创建

Javascript 重用承诺创建,javascript,node.js,promise,es6-promise,Javascript,Node.js,Promise,Es6 Promise,我试图用不同的URL调用getPromise函数以返回不同的promise,但是在second promise的then success函数中没有定义 var http=require('http'); var URL='http://localhost:3000'; var getPromise=function(url){ var promise=new Promise(function(resolve,reject){ http.get(url,function(

我试图用不同的URL调用getPromise函数以返回不同的promise,但是在second promise的then success函数中没有定义

var http=require('http');
var URL='http://localhost:3000';

var getPromise=function(url){
    var promise=new Promise(function(resolve,reject){
        http.get(url,function(response){
            if(response.statusCode < 200 || response.statusCode > 299){
                reject(new Error('ErrorCode '+response.statusCode))
            }
            var result="";
            response.on('data',function(chunk){result +=chunk;} )
            response.on('end',function(){resolve(result);} )
        })
    });
   return promise;
}



getPromise(URL+'/olympic/2016/ranking/4')
      .then(function(data){
         console.log("Response "+JSON.parse(data).Country);
         getPromise(URL+'/iso/country/'+JSON.parse(data).Country);
      })
      .then(function(data){
        console.log("Data "+data)
      })
      .catch(function(err){
         console.log(err)
      });
var http=require('http');
var URL='1〕http://localhost:3000';
var getPromise=函数(url){
var承诺=新承诺(功能(解决、拒绝){
get(url,函数(响应){
if(response.statusCode<200 | | response.statusCode>299){
拒绝(新错误('ErrorCode'+response.statusCode))
}
var结果=”;
on('data',函数(chunk){result+=chunk;})
on('end',function(){resolve(result);})
})
});
回报承诺;
}
getPromise(URL+'/olympic/2016/ranking/4')
.then(功能(数据){
log(“响应”+JSON.parse(data.Country);
getPromise(URL+'/iso/country/'+JSON.parse(data.country);
})
.then(功能(数据){
console.log(“数据”+数据)
})
.catch(函数(err){
console.log(错误)
});

您必须返回下一个“then”的数据才能接收它

getPromise(URL+'/olympic/2016/ranking/4')
      .then(function(data){
         console.log("Response "+JSON.parse(data).Country);
         return getPromise(URL+'/iso/country/'+JSON.parse(data).Country);
      })
      .then(function(data){
        console.log("Data "+data)
      })
      .catch(function(err){
         console.log(err)
      });

您可以更改函数

getPromise(URL+'/olympic/2016/ranking/4')
      .then(function(data){
         console.log("Response "+JSON.parse(data).Country);
         getPromise(URL+'/iso/country/'+JSON.parse(data).Country)
         .then(function(data){
           console.log("Data "+data)
         });
      })

      .catch(function(err){
         console.log(err)
      });

确保从promise返回数据
,然后

getPromise(URL+'/olympic/2016/ranking/4')
  .then(function(data){
     console.log("Response "+JSON.parse(data).Country);
     return getPromise(URL+'/iso/country/'+JSON.parse(data).Country);
  })
  .then(function(data){
    console.log("Data "+data)
  })
  .catch(function(err){
     console.log(err)
  });

无论您从
返回什么,然后从
回调返回什么,都将在承诺链中进一步传递。现在您没有返回任何内容,因此隐式返回
未定义的
您缺少一个
返回:

getPromise(URL+'/olympic/2016/ranking/4')
  .then(function(data){
     console.log("Response "+JSON.parse(data).Country);

     /////////// here
     return getPromise(URL+'/iso/country/'+JSON.parse(data).Country);
  })
  .then(function(data){
    console.log("Data "+data)
  })
  .catch(function(err){
     console.log(err)
  });

如果您不返回第二个
getPromise(…)
?开始使用
async/await
,一切都要清楚添加return后它可以工作,但我不明白这一点,对getPromise的调用是否已经返回了承诺。再次说明:无论您从
返回什么,那么
回调都会传递到下一个
然后
回调。因此,如果您希望通过
getPromise
返回的承诺在下一次
then
回调中可用,则需要从上一次回调中返回它。我认为调用getPromise实际上是将承诺返回给下一次回调。谢谢,现在收到了