Nodejs обещание рекурсивной функции соответствует условию и перестает выполнять, но не возвращаетсяJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Nodejs обещание рекурсивной функции соответствует условию и перестает выполнять, но не возвращается

Сообщение Anonymous »

Я сделал рекурсивную функцию в Nodejs, которая в обещании. Предполагается, что он будет рекурсивно запросить сервер, и он имеет два условия. Если он заканчивается из максимального количества серверов, он вернет ошибку и уйдет. Эта часть работает нормально. Вторая часть заключается в том, что если она получит ответ, который содержит «истинную», то она будет успешной и должна выйти и вернуть ответ. Выходная часть работает нормально, и она останавливается, как только получает ответ с «true», но она не возвращает ее. переменные Tensordock для сохранения места. < /p>

Код: Выделить всё

function getPorts(getPortsInputTensordockServer) {
return new Promise((resolve, reject) => {
try {
request(getPortsInputTensordockServer, (error, response, getPortsResponseBody) => {
getPortsResponseBody = JSON.stringify(getPortsResponseBody)
getPortsResponseBody = getPortsResponseBody.split("[")
getPortsResponseBody = getPortsResponseBody[1]
getPortsResponseBody = getPortsResponseBody.split("]")
getPortsResponseBody = getPortsResponseBody[0]
getPortsResponseBody = getPortsResponseBody.split(",")
return resolve(getPortsResponseBody)
})
} catch (err) {
reject(err)
}
})
}

function createVM(n, createVMResponseBody) {
return new Promise((resolve, reject) => {
(async () => {
try {
if (createVMResponseBody.includes("true") === true) {
return resolve(createVMResponseBody)
}
if (n === 21) {
return resolve("oh no! no more servers")
}
var tensordockServer = eval("tensordockServer" + n)
var tensordockServerName = tensordockServerMap.get("tensordockServerName" + n)
var getPortsResult = await getPorts(tensordockServer)

var createVMOptions = {
'method': 'POST',
'url': 'https://marketplace.tensordock.com/api/v0/client/deploy/single',
'headers': {
'Content-Type': 'application/x-www-form-urlencoded'
},
form: {
'api_key': 'xxxx',
'api_token': 'xxxx',
'password': 'superC0mplexPassword',
'name': 'My NVIDIA RTX A4000 Server',
'gpu_count': '1',
'gpu_model': 'rtxa4000-pcie-16gb',
'vcpus': '4',
'ram': '8',
'external_ports': `{${getPortsResult[0]}, ${getPortsResult[1]}}`,
'internal_ports': '{22, 8888}',
'hostnode': tensordockServerName,
'storage': '150',
'operating_system': 'Windows 10'
}
};
createVMResponseBody = await createVMRequest(createVMOptions)
createVM(n + 1, createVMResponseBody)
} catch (err) {
return reject(err)
}
})()
})
}

function createVMRequest(createVMRequestInput) {
return new Promise((resolve, reject) => {
try {
request(createVMRequestInput, (error, response, createVMRequestBody) => {
createVMRequestBody = JSON.stringify(createVMRequestBody)
resolve(createVMRequestBody)
})
} catch (err) {
reject(err)
}
})
}

async function testCall() {
const result = await createVM(1, "test")
console.log(`The result is ${result}`)
}

testCall()
Я также попытался изменить условие, если оно включает «тест», и это работает нормально.

Подробнее здесь: https://stackoverflow.com/questions/793 ... but-does-n
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»