После ответа на этот вопрос . Вы должны быть в состоянии сделать это, используя Promise
.
Вы должны изменить только функцию getUsernames
.
function getUsernames(callback) {
// Social Sites to Check
var sitenames = [
'facebook',
'twitter',
'instagram',
'youtube',
'slack',
'blogger'
];
// Check Usename availabitliy
let requests = sitenames.map((sitename) => {
return new Promise((resolve) => {
Unirest.post('https://api.namechk.com/services/check.json')
.headers({
'AUTHORIZATION': 'Bearer ',
'Accept': 'application/vnd.api.v1+json',
}).send({
'site': sitename,
username: name,
}).end(function(response) {
if (response.body.available == false){
counter++;
} else {
userNamesAvailable.push(response.body);
}
resolve();
});
});
});
Promise.all(requests).then(() => {
console.log(userNamesAvailable);
callback(counter, dotcom);
});
}
function finalCheck() {
console.log('Start finalCheck')
console.log(counter)
console.log(dotcom)
//Final Check for is a name is a go or not
//If one social site is not available and the
if (counter == 1 & dotcom == 'true') {
console.log(5 - counter + ' social sites available')
res.send("yes");
} else {
res.send("no")
}
}
Помните, что асинхронные функции в javascript
- это особенность, а не то, с чем вам следует бороться (я думаю, вы пытаетесь сделать объявление своей основной функции async function
). Постарайтесь сначала понять их, и вы заметите, что они являются большим преимуществом.
Есть много документации о них там ...
асинхронная функция
понимание обещаний
РЕДАКТИРОВАТЬ: Не отправляйте переменные, которые вы вызываете global в качестве параметров, они уже доступны в вызываемой функции.