Я пытаюсь выполнить обещание, однако, кажется, что когда я делаю это:
if (o.TotalCollectionSize - 20 <= index) {
var selectedserver = games.gameservers[Math.floor(Math.random() * games.gameservers.length)]
console.log(selectedserver)
resolve(selectedserver)
return;
}
Обещание не разрешается, однако, если решение выходит за рамки этого оператора if, разрешение будет работать.
(o.TotalCollectionSize - 20 <= index)
это утверждение всегда будет правдой, мне нужно, чтобы оно прекратилось, как только оно дойдет до этой точки, поэтому у меня оно здесь разрешается.
console.log(selectedserver)
отлично работает, и показывает, что мне нужно решить. Моя проблема в том, что, как только он достигнет точки, в которой он должен решить, это не так.
getPing(game.placeId, 0).then(function (r) {
console.log(r)
res.end(JSON.stringify(r))
})
getPing - это функция, которая возвращает новое обещание, значение (r) будет тем, что разрешено. Как упоминалось ранее, мой метод resolv () работает вне оператора if, и я не уверен, почему он не работает внутри. Я новичок в обещаниях, так что это может быть незначительной проблемой.
Редактировать: это целая функция для тех, кому нужно посмотреть,
var getPing = function (id,index) {
return new Promise(function (resolve, reject) {
options.agent = keepAliveAgent
index = index || 0;
var r = https.request(options, function (res) {
var data = []
res.on('data', function (d) {
data.push(d)
}).on('end', function () {
var buf = Buffer.concat(data)
var encodingheader = res.headers['content-encoding']
if (encodingheader == 'gzip') {
zlib.gunzip(buf, function (err, buffer) {
var o = JSON.parse(buffer.toString())
// o is what is returned
if (o.TotalCollectionSize - 20 <= index) {
console.log(o.TotalCollectionSize - 20, '<=', index)
var selectedserver = games.gameservers[Math.floor(Math.random() * games.gameservers.length)]
console.log(selectedserver)
resolve(selectedserver)
return;
}
if (index < o.TotalCollectionSize) {
index = index + 10;
console.log(index, o.TotalCollectionSize)
o.Collection.sort(function (a, b) {
return a.Ping > b.Ping
})
if (typeof (o.Collection[0]) != "undefined") {
var playerscapacity = o.Collection[0].PlayersCapacity.charAt(0)
if (playerscapacity != o.Collection[0].Capacity) {
games.gameservers.push(o.Collection[0])
}
}
getPing(id, index)
}
})
}
})
})
r.end()
//reject('end of here')
})
}
Как я уже говорил, весь этот код прекрасно работает, пока не придет время выполнить обещание.