У меня есть такой код javascript:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
У меня всегда есть неопределенное значение для теста var. Я думаю, это потому, что обещания еще не решены ... есть способ вернуть значение из обещания?
javascript
promise
Priscy
источник
источник
then()
вызова снова является обещанием, которое обертывает возвращенное вами значение.promise
. Вы нигде не показываете, что он определен, и ничего не возвращаете из своейjustTesting()
функции. Если вам нужна более качественная помощь, вам нужно описать, какую проблему вы пытаетесь решить, а не просто показывать нам код, который настолько «не работает», что даже не иллюстрирует, что вы действительно пытаетесь сделать. Объясните проблему, которую вы пытаетесь решить.Ответы:
Когда вы возвращаете что-то из
then()
обратного вызова, это немного волшебно. Если вы возвращаете значение, следующийthen()
вызывается с этим значением. Однако, если вы возвращаете что-то похожее на обещание, следующееthen()
ожидает этого и вызывается только тогда, когда это обещание устанавливается (выполняется / не выполняется).Источник: https://developers.google.com/web/fundamentals/getting-started/primers/promises#queuing-asynchronous-actions.
источник
Чтобы использовать обещание, вы должны либо вызвать функцию, которая создает обещание, либо создать его самостоятельно. На самом деле вы не описываете, какую проблему на самом деле пытаетесь решить, но вот как вы могли бы создать обещание самостоятельно:
Или, если у вас уже есть функция, которая возвращает обещание, вы можете использовать эту функцию и вернуть ее обещание:
источник
return
, то естьjustTesting
говоритreturn.then => return
. Я знаю, что это работает. Bcs. Я реализовал это (bcs linting заставил меня отказаться от этогоnew Promise
), но не могли бы вы объяснить, как понять / подумать об этой паре возврата / возврата?.then()
является отдельной функцией от содержащейся функции, поэтому при ее вызове она имеет собственное возвращаемое значение. Во-вторых, возвращаемое значение.then()
обработчика становится разрешенным значением обещания. Итак,.then(val => {return 2*val;})
изменяется разрешенное значение сval
на2*val
.Что я здесь сделал, так это то, что я вернул обещание от функции justTesting. Затем вы можете получить результат, когда функция будет разрешена.
Надеюсь это поможет!
источник
Я предпочитаю использовать команду "await" и асинхронные функции, чтобы избавиться от путаницы с обещаниями,
В этом случае я бы сначала написал асинхронную функцию, она будет использоваться вместо анонимной функции, вызываемой в части этого вопроса "prom.then":
а затем я бы вызвал эту функцию из основной функции:
Отметив, что здесь я вернул в асинхронные функции как основную, так и вспомогательную функцию.
источник