2017-08-12 37 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