2016-10-11 149 views
0

我正在嘗試編寫一個函數,使用instagram-node獲取所有喜歡使用Sails.js圖片的用戶,但我遇到了一些同步問題。instagram節點同步問題

我試過這個,但它不工作,因爲回調在getLikes()之前調用。 任何想法?

function getAllMediaIDs(function() { 
    // Send results 
}); 

function getAllMediaIDs(callback) { 

     ig.user_self_media_recent(options, function(err, medias, pagination, remaining, limit) { 

      if (err) { 
       // Error 
      } 
      else { 
       for (var i = 0; i < medias.length; i++) { 
        getLikes(medias[i].id); 
       } 
       callback(); 
      } 
     }); 
    } 

function getLikes(mediaId) { 

     ig.likes(mediaId, function(err, result, remaining, limit) { 

      if (err) { 
       // Error 
      } 
      else { 

       for (var i = 0; i < result.length; i++) { 
        // Store likes  
       } 

      } 

     }); 

    } 

回答

0

在異步操作中使用異步循環。所以,相反for()循環使用async.each()async.eachSeries()async LIB

文件:each()/eachSeries()

const async = require('async'); 

getAllMediaIDs() 
    .then(function(data) { 
    // ur logic 
    }) 
    .catch(function(err) { 
    // handle error 
    }); 

function getAllMediaIDs() { 

    return new Promise(function(resolve, reject) { 
     ig.user_self_media_recent(options, function(err, medias, pagination, remaining, limit) { 

      if (err) return reject(err); //return Error 

      async.eachSeries(medias, function(key, next) { 
       getLikes(key.id) 
        .then(function(data) { 
         next(); // go to next key 
        }) 
        .catch(function(err) { 
         return reject(err); // something went wrong so return error 
        }); 
      }, function(err, data) { // <-- called when all iteratee functions have finished or error occurs 
       if (err) return reject(err); 
       return resolve(); // everything was good 
      }); 
     }); 
    }); 
} 

function getLikes(mediaId) { 
    return new Promise(function(resolve, reject) { 

     ig.likes(mediaId, function(err, result, remaining, limit) { 
      if (err) return reject(err); // return error 

      async.each(result, function(key, next) { 
       // some store logic 
       // eg. arr.push(key); 
       next(); // go to next key 
      }, function(err, data) { 
       if (err) return reject(err); // return error 
       return resolve(); // everything was good 
      }); 
     }); 
    }); 

} 
+0

謝謝!函數getAllMediaIDs中是否缺少回調函數()? – LorenzoR

+0

@LorenzoR對。固定! – SkyQ

+0

現在,它的工作,謝謝! – LorenzoR