【问题标题】:How can we store the values resolved by a JavaScript Promise? [duplicate]我们如何存储由 JavaScript Promise 解析的值? [复制]
【发布时间】:2021-11-22 17:59:16
【问题描述】:

我目前正在学习异步 JavaScript,但我对如何获取 promise 返回的值感到困惑 我的代码:

let p  = Promise.resolve("Passed")

let x = p.then(msg=>msg).catch(msg=>msg)
setTimeout(()=>console.log(x), 2)
console.log(x)

输出:

Promise { <pending> }
Promise { 'Passed' }

我怎样才能得到 .then 函数返回的字符串“Passed”,以及为什么即使 Promise 已解决,promise 仍处于挂起状态?但是当我们console.log它的值使用setTimeout函数时给出了它的值,以及如何从Promise { 'Passed' }获取"Passed"

【问题讨论】:

  • ".then 函数返回的字符串 "Passed"" - 不,不是。 .then() 返回一个承诺。执行console.log inside then 回调

标签: javascript asynchronous promise es6-promise


【解决方案1】:

您现在无法得到承诺之外的回应。 要解决,您可以使用 2 种方法:

在 then 内部订阅一个新函数,该函数得到承诺结果 // 但它会像这样异步

var p = Promise.resolve([1,2,3]);
p.then(function(v) {
  console.log(v[0]); // 1
});

第二个是: 使用带有 await 结构的异步函数

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });

  let result = await promise; // in this part it will be wait until promise will end its work

  alert(result); // "done!"
}

f();

【讨论】:

    【解决方案2】:

    您打算以这种方式使用承诺:

    p.then((x) => {
        console.log(x);
    });
    

    或这种方式(仅适用于异步函数):

    x = await p;
    

    通常,p 实际上是一个返回承诺的函数,如下所示:

    function p() {
        return new Promise((resolve, reject) => {
            resolve("message");
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 2014-01-24
      • 2020-02-09
      • 2020-06-27
      • 1970-01-01
      • 2015-08-15
      相关资源
      最近更新 更多