为什么这个简单的JS承诺会返回承诺?

时间:2019-05-14 16:37:50

标签: javascript promise es6-promise

一个非常简单的问题。我将其简化为最能说明我问题的版本。

为什么这个普通的JS返回一个promise,我如何才能使其返回“ Hello”?

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

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

3 个答案:

答案 0 :(得分:2)

正在发生的事情是您正在“更改” then方法返回的值。

then方法将始终返回承诺,即使您返回的是值,它也封装在已解析的承诺中(例如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");
      });
    }

答案 1 :(得分:0)

alert调用test函数,该函数在调用时返回promise(未解决)。

当承诺在.then()方法内解析时,您必须执行所需的任何代码执行。

test()
.then(function(result) {
  alert(result);
})


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

答案 2 :(得分:0)

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

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

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

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