Чтобы получить правильные данные, вам нужно использовать обещания.Вместо обратного вызова запроса используйте обещание.
Поскольку checkForDiff()
является асинхронной функцией, вы должны вернуть обещание из функции, а не пытаться вернуть outdatedLanguages
.В вашем случае вам нужно использовать функцию Promise.all()
, потому что у вас есть несколько асинхронных функций.В некотором смысле, Promise.all()
ожидает выполнения всех задач.В другой части кода, где вы используете эту функцию, вы должны знать, что эта функция является обещанием, поэтому вы должны использовать ее соответствующим образом.По сути, вы можете сделать что-то вроде этого.
function checkForDiff() {
let outdatedLanguages = [];
let promises = [];
var options = {
url: 'https://xxxxxxxxxxxxxxxxxxxxxxxxx',
headers: { 'Key': 'xxxxxxxxxxxxxxxxxxxxxx' }
};
for (let index = 0; index < locales.length; index++) {
//Change url for new https request
options.url = `https://xxxxxxx?locale=${locales[index].symbol}`
promises.push(/* request as promise */);
}
return Promise.all(promises).then(() => outdatedLanguages);
}
Вы вызываете функцию следующим образом.
checkForDiff().then((outdatedLanguages) => {
// outdatedLanguages is the array you want
})
Для запроса обещания вы можете использовать пакет request-promise
.Используйте команду npm install --save request-promise
.Затем включите пакет var rp = require('request-promise');
.Пример запроса следующий:
var options = {
uri: 'https://api.github.com/user/repos',
qs: {
access_token: 'xxxxx xxxxx' // -> uri + '?access_token=xxxxx%20xxxxx'
},
headers: {
'User-Agent': 'Request-Promise'
},
json: true // Automatically parses the JSON string in the response
};
rp(options)
.then(function (repos) {
console.log('User has %d repos', repos.length);
})
.catch(function (err) {
// API call failed...
});