如何控制台记录一个承诺?

How to console log a promise?

为什么这段代码不能打印出任何东西?

预期的结果应该是async result is: 2。但它是0.

"use strict"

// run consoleLogPromise
consoleLogPromise( PromiseAChangeCount() );

// a utility which will always console log any promise 

async function consoleLogPromise(callback) {
  //const res = await callback(); TypeError: callback is not a function
  const res = await callback;
  console.log("async result is: ", res);
}

// a promise returning function
async function PromiseAChangeCount() {
  let count = 0;
  await setTimeout(() => {
    count = 2
  }, 200);
   return count;
}

你必须做类似 this.Return 来自 PromiseAChangeCount 的承诺,它解析 setTimeout 中的值,然后你可以在 consoleLogPromise[=14 中等待它=]

"use strict"

// run consoleLogPromise
consoleLogPromise(PromiseAChangeCount());

// a utility which will always console log any promise 

async function consoleLogPromise(callback) {
  //const res = await callback(); TypeError: callback is not a function
  const res = await callback;
  console.log("async result is: ", res);
}

// a promise returning function
async function PromiseAChangeCount() {
  let count = 0;
  return new Promise((resolve, _) => {
    setTimeout(() => {
      count = 2;
      resolve(count)
    }, 200);
  })
}

如评论所述;应该添加一个真正的 Promise await later(200);

setTimeout doesn't return a promise, so await doesn't have any effect. – Felix Kling

这将 return 一个承诺。 return new Promise

"use strict"

// run consoleLogPromise
consoleLogPromise( PromiseAChangeCount() );

// a utility which will always console log any promise 

async function consoleLogPromise(callback) {
  //const res = await callback(); TypeError: callback is not a function
  const res = await callback;
  console.log("async result is: ", res);
}

// a promise returning function
async function PromiseAChangeCount() {
  let count = 0;
  await later(200);
  count = 2;
   return count;
}
function later(delay) {
    return new Promise(function(resolve) {
        setTimeout(resolve, delay);
    });
}