instagram节点同步问题

instagram-node synchronization issue

我正在尝试编写一个函数,让所有用 Sails.js 喜欢你的照片的用户使用 instagram-node,但我遇到了一些同步问题。

我试过了,但它不起作用,因为回调是在 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    
                }

            }

        });

    }

在异步操作中使用异步循环。因此,for() 循环使用来自 async lib

async.each()async.eachSeries()

文档: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
            });
        });
    });

}