Пробовал упростить мой код, чтобы показать свою проблему.Установка глобальной переменной в обратном вызове
var rp = require('request-promise');
var ids = [];
runmyFunction();
runmyFunction();
function runmyFunction() {
var id = 5;
console.log("runmyFunc: "+ids);
if (ids.indexOf(id)==-1){
myFunction(id);
}
}
function myFunction(id) {
var options = {
uri: 'someURI'
, headers: {
'User-Agent': 'Request-Promise'
}
, json: true
};
rp(options)
.then(function (response) {
ids.push(5);
console.log("myFunc: "+ids);
})
.catch(function (err) {
console.log(err);
});
}
В принципе у меня есть эта функция runmyFunction
, которая должна выполнять только myFunction
если не идентификатор 12345 в нем. Поэтому, если я запустил его 10 раз, а 11-й возвращает id 12345, он должен прекратить выполнение функции. Проблема заключается в том, что идентификатор никогда не попадает в массив, даже если запрос преуспел.
Аналогичные проблемы связаны с тем, что запрос является асинхронным. Является ли это причиной и в моем коде?
// edit Я играл с ним и редактировал код. Текущий код записывает это в консоль:
runmyFunc:
runmyFunc:
myFunc:5
myFunc:5,5
Это потому, что это асинхронный. Любые идеи, чтобы избежать этого?
Поскольку идентификатор пришел из запроса, вы никогда не сможете проверить идентификаторы запроса, прежде чем вы их получите. Вам нужно будет найти другую логику. – Shilly
Извините, я не дал понять, что хочу, чтобы функция выполнялась несколько раз и останавливалась, если идентификатор находится в массиве. Я исправил это. – Trojan
Если вы вызываете идентификатор один за другим, просто запустите проверку после прибытия каждого идентификатора. если это не 12345, пусть myFunction снова запустится. PS: вы проверили, действительно ли идентификаторы находятся в данных, которые вы получаете? – Shilly