JavaScript не разрешает обещание - PullRequest
0 голосов
/ 30 января 2019

Javascript код, пытающийся немедленно выполнить обещание:

           var promiseData;

            var promise = <<<promise maker>>>.then(function (myContent) {
                console.log("success");
            }, function () {
               console.log("fail!");   
            });

            Promise.resolve(promise)

            console.log("about to return");

            return promiseData;

, который выводит на консоль:

about to return
success

У меня есть требование, чтобы обещание немедленно вернулось (обещаниесоздается в методе обратного вызова, и метод должен немедленно вернуть значение, возвращая данные позже, что означает, что мы больше не в правильном контексте, и значение (которое еще не было возвращено) уже использовалось (как неопределенное).

Какие-либо предположения о том, что я могу делать неправильно?

Обновление: <<<promise maker>>> - это вызов зависимости, которая возвращает обещание;

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Если я не ошибаюсь, этот поток функций близок к тому, что вам нужно, но он также возвращает обещание, преобразованное в promiseData:

async function getPromiseData() {
  try {
    const promiseData = await <<<promise maker>>>;
    console.log("success");
    console.log("about to return");
    return promiseData;
  } catch (err) {
    console.log("fail!");
  }
}
0 голосов
/ 30 января 2019

Похоже, вы ожидаете, что Promise.resolve(promise) немедленно остановится, подождите, пока обещание не будет выполнено, и продолжите после этого.Это было бы близко к синхронному выполнению.

Однако Promise.resolve(value) возвращает Обещание , которое немедленно разрешается с помощью value, оно не разрешает существующее Обещание.

То, что вы ищете, это await (или просто Promise.then):

var promise = <<<promise maker>>>.then(function (myContent) {
    console.log("success");
}, function () {
    console.log("fail!");   
});

promise.then(function() {
  console.log("about to return");
});

Вы можете заметить, что я пропустил promiseData во фрагменте.Это потому, что для возврата данных в нужный момент, вы также должны быть асинхронными.Таким образом, вы должны фактически вернуть Обещание, которое разрешится с помощью promiseData, оно сводится к:

<<<promise maker>>>
  .then(function(promiseData) {
    console.log('success');
    return promiseData;
  })
  .then(function(promiseData) {
    console.log('about to return');
    return promiseData;
  })
  .catch(function(err) { console.log('fail!'); })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...