我们如何存储由 JavaScript Promise 解析的值?

How can we store the values resolved by a JavaScript Promise?

我目前正在学习异步 JavaScript,我对如何通过承诺获得返回值感到困惑 我的代码:

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"

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

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

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

x = await p;

通常,p 实际上是一个 returns 承诺的函数,像这样:

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

您现在无法得到不符合承诺的回复。 要解决您可以使用 2 种方法:

在 then 内部使用一个新函数订阅,该函数获取 promise 结果 // 但它会像这样异步

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();