Я новичок в JavaScript и node.js, и поэтому бросание в Promises довольно сложно, когда требуется, чтобы мой бот функционировал.
var storedUserID;
ROBLOX.getIdFromUsername(accountArg).then(function(userID) {
message.reply("your id is " + userID);
storedUserID = userID;
});
message.reply(storedUserID);
Это, по сути, то, что я написал, он создает переменную с именем " storedUserID ", которую я хотел бы обновить позже. Я пытаюсь обновить его в Promise, но он, похоже, не работает.
В коде есть message.reply("ваш id" + userID); который работает так, как ожидалось. Он будет распечатывать пользователю "ваш идентификатор [NUMBER]", поэтому я знаю, что идентификатор пользователя не равен нулю.
Однако, когда я запускаю message.reply(storedUserID); вне Promise, ничего не печатается, поскольку переменная не сохраняется. Я не знаю, почему.
Любая помощь будет оценена по мере того, как это пойдет на мою работу в колледже! Спасибо!
return
значение в функцию, переданную в .then()
var storedUserID = ROBLOX.getIdFromUsername(accountArg)
.then(function(userID) {
return userID;
});
вы можете использовать или изменить значение Promise
когда это необходимо
storedUserID = storedUserID.then(id) {
return /* change value of Promise 'storedUserID' here */
});
доступ и передать значение message.reply()
в .then()
storedUserID.then(function(id) {
message.reply(id);
});
или же
var storedUserID = ROBLOX.getIdFromUsername(accountArg);
// later in code
storedUserID.then(function(id) {
message.reply(id);
});
Поскольку getIdFromUsername является асинхронным, конечная строка, в которой вы указываете message.reply, сохраненный идентификатор запускается до того, как ID будет сохранен.
Асинхронные функции, такие как getIdFromUsername, не останавливают выполнение следующих строк кода. Если вы хотите, чтобы это произошло после того, как идентификатор возвращается он должен пойти внутри then
обратного вызова.
then
выполняется асинхронно. К тому времени, когда вы регистрируете этот обратный вызов, еще не выполненPromise
?