javascript无法解决promise

时间:2019-01-30 15:07:17

标签: javascript promise

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返回(promise是在回调方法中创建的,并且该方法需要立即返回一个值,稍后返回数据意味着我们不再处于正确的上下文和值中) (尚未返回)已被使用(未定义)。

关于我可能做错了什么的任何建议?

更新: <<<promise maker>>>是对依赖关系的调用,该依赖关系返回了承诺;

2 个答案:

答案 0 :(得分:0)

您似乎希望Promise.resolve(promise)立即停止,等到诺言解决后再继续。那将接近同步执行。

但是,Promise.resolve(value)返回的 Promise 会立即以value进行解决,而不会解决现有的Promise。

您正在寻找的是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,它归结为:

<<<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!'); })

答案 1 :(得分:0)

如果我没记错的话,此函数流程就在您所需的范围内,但是它还会返回一个已分解为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!");
  }
}