【问题标题】:Why does this simple JS promise return a promise? [duplicate]为什么这个简单的 JS 承诺会返回一个承诺? [复制]
【发布时间】:2019-05-15 00:45:59
【问题描述】:

一个非常简单的问题。我把它归结为最简单的版本来说明我的问题。

为什么这个 vanilla JS 会返回一个 Promise,我怎样才能让它返回“Hello”?

    
let result = test()
  .then(function(result) {
     return result;
  });

alert(result);
    
function test(serialized) {
  return new Promise(function(resolve, reject) {
    resolve("Hello");
  });
}

【问题讨论】:

  • “返回承诺”是什么意思?你想实现什么行为?
  • 只需使用:- (async () => { alert(await test()) })();test 获取结果..!

标签: javascript promise es6-promise


【解决方案1】:

您正在“警告”then 方法返回的值。

then 方法将始终返回一个 Promise,即使您返回一个值,它也包含在已解析的 Promise 中(例如 Promise.resolve('Hello')),这允许您实现 可链接性,例如例如,您可以在 then 回调中调用并返回其他 Promise,它们将等待解析继续并解析。

  test()
      .then(function(result) {
        console.log(result);
        return result + ' world!';
      }).then(function(result2) {
        console.log(result2); // Hello world!
        return new Promise(function (resolve) { resolve('End') });
      }).then(function (result) {
         console.log(result);
      })
    
    
    function test(serialized) {
      return new Promise(function(resolve, reject) {
        resolve("Hello");
      });
    }

【讨论】:

    【解决方案2】:

    promise.then((result) => {}) 总是返回另一个 promise,这样我们就可以链接多个 .then() 调用。

    how can I get it to return "Hello"? : 为此你必须await 一个承诺。

    例如:alert(await test()) 问题是您只能在异步函数中使用 await。

    另一种选择是在此期间发出警报。 test().then((result) => alert(result))

    【讨论】:

      猜你喜欢
      • 2019-12-26
      • 2015-11-27
      • 2015-06-05
      • 2016-02-04
      • 2015-12-16
      • 2016-09-30
      相关资源
      最近更新 更多