2017-04-10 54 views
0

嗨我想要获取它在请求中使用请求和cheerio在异步过程中返回的id变量。在异步模块请求之外获取变量

我试过通过返回承诺,但没有奏效。

let id; 
 

 
    request(mainUrl, function(err, res, body) { 
 
       
 
     let $ = cheerio.load(body) 
 

 
     var links= $(".book").map(function(){ 
 
      \t \t \t return $(this).attr("href"); 
 
     \t }).get() 
 

 
    \t \t \t \t \t \t \t 
 
     var url= links[0] 
 

 

 
     var getId= url.match(/book\/show\/(\d+)/) 
 

 

 
     id= getId[1] 
 
     //This is the id I'm getting: "36474" 
 
    \t \t \t \t \t \t \t 
 
     return Promise.resolve(id) 
 

 
    }); 
 

 

 
    .then((value)=>{ 
 
    \t console.log(id) 
 

 
    })

+0

什么要求的lib?看起来像你使用基于回调的,可能不支持'.then' –

+0

*“没有工作”*不是一个适当的技术问题诊断 – charlietfl

回答

0

好吧,我做到了:你使用

let id; 
 

 
let promise= new Promise((resolve, reject)=>{ 
 
\t \t \t request(mainUrl, function(err, res, body) { 
 
      
 
     let $ = cheerio.load(body) 
 

 
     var links= $(".book").map(function(){ 
 
     \t \t return $(this).attr("href"); 
 
    \t \t }).get() 
 

 
\t \t \t \t \t \t \t 
 
     var url= links[0] 
 

 

 
     var getId= url.match(/book\/show\/(\d+)/) 
 

 

 
     id= getId[1] 
 
     //Ex: => "36474" 
 
\t \t \t \t \t \t \t 
 

 
     return resolve(id) 
 

 
}); 
 
}) 
 

 

 
promise 
 
.then((value)=>{ 
 
\t console.log(id) 
 

 
})