2017-08-12 33 views
1

我的功能看起来像现在这样:再次约异步/等待在JavaScript

var GetImages = async() => { 
var images_array = []; 
await request ({ 
    url: `https://api.tumblr.com/v2/blog/nameblog/posts?api_key=${process.env.TUMBLR_KEY}&type=photo`, 
    json: true 
}, (error, response, body) => { 
    if(error){ 
     console.log('Unable to connect'); 
    }else if(body.meta.status === "ZERO_RESULTS"){ 
     console.log('Uable to find that address.'); 
    }else if(body.meta.status === 200){ 
     body.response.posts.forEach(function(obj) { 
      obj.photos.forEach(function(photo) { 
       if(photo.original_size.width>photo.original_size.height){ 
        images_array.push(photo.original_size.url); 
        console.log("dawdaw"); 
       } 
      }); 
     }); 
     //callback(images_array); 
    } 
}); 
return images_array; 
} 

我不知道,如何返回我的数组后,我会和值填充它。回调它可以正常工作,但我想用异步/等待正确的方式执行。谢谢你的帮助。

+2

您需要_promisify_'request'或使用'请求promise'模块。 – alexmac

+0

首先,您需要使用'request'这样的'request'版本来返回一个promise,因为'await'只使用promise来做异步的事情。然后,您需要从异步函数中返回一个承诺,以便其调用者能够使用其结果。你不能用'await'以某种方式同步返回一个异步结果。 “等待”会带来一些魔力,但不是那种魔力。你的'GetImages()'函数也需要返回一个承诺。 – jfriend00

回答

0

创建方法为request回报承诺和使用方法与await

requestPromise =() => { 

    return new Promise(function(resolve, reject) { 
     request({ 
      url: `https://api.tumblr.com/v2/blog/nameblog/posts?api_key=${process.env.TUMBLR_KEY}&type=photo`, 
      json: true 
     }, (error, response, body) => { 
      if (error) { 
       console.log('Unable to connect'); 
       reject(); 
      } else if (body.meta.status === "ZERO_RESULTS") { 
       console.log('Uable to find that address.'); 
       reject(); 
      } else if (body.meta.status === 200) { 
       body.response.posts.forEach(function(obj) { 
        obj.photos.forEach(function(photo) { 
         if (photo.original_size.width > photo.original_size.height) { 
          images_array.push(photo.original_size.url); 
          console.log("dawdaw"); 
         } 
        }); 
       }); 
       resolve(images_array) 
      } 
     }); 
    }); 

} 

var GetImages = async() => { 
    try 
    { 
     images = await requestPromise(); 
     return images; 
    } 
    catch(e){return [];} 
} 
+0

你应该只promisify' request',并把所有的东西从'GetImages'函数中回调。 – Bergi