【问题标题】:Promise not fulfilled承诺未兑现
【发布时间】:2021-01-15 18:05:02
【问题描述】:

这是一个基本问题。我正在通过一个名为 promise-it-wont-hurt 的异步编程 js/node 研讨会。我有以下练习:

Create a promise. Have it fulfilled with a value of 'FULFILLED!' in
executor after a delay of 300ms, using setTimeout.

Then, print the contents of the promise after it has been fulfilled by passing
console.log to then.

我的 test.js 文件包含:

var promise = new Promise(function (fulfill, reject) {

  setTimeout(() => 'FULFILLED!',300);
});

promise.then((r)=> console.log(r));

当我在命令行运行“node test.js”时,我没有得到任何输出。我做错了什么?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    所有这一切都是返回字符串'FULFILLED!':

    () => 'FULFILLED!'
    

    但它不会在任何地方返回它setTimeout 当然不会对这个结果做任何事情,Promise 也不会。要使用一个值来满足Promise,您需要Promise 本身提供的fulfill 函数:

    () => fulfill('FULFILLED!')
    

    (这通常称为resolve,但不管你怎么称呼它,只要它是传递给Promise构造函数的函数中的第一个参数。)

    如您所想,要拒绝 Promise,您将类似地调用 reject 函数。

    【讨论】:

    • 因此在函数谓词中,您可以将函数 f 的返回值表示为 (f) => {f(value)} - 例如 ... { .() => fully('FULFILLED !') } ?
    • @user1592380:我认为这比您要描述的要简单。 Promise 对象构造函数接受一个带有两个参数的函数。 Promise 本身提供了这些参数。第一个是成功的回调,第二个是失败的回调。在该整体功能中,您可以做任何您喜欢的事情,这很可能是一个异步操作(或多个)。只要最终使用了这些回调,就可以等待承诺。
    【解决方案2】:

    你永远不会打电话给fulfill(更惯用的名字是resolve)。

    您传递给setTimeout 的函数只是返回(没用,因为setTimeout 不关心返回值)一个字符串。

    它需要以字符串作为参数调用fulfill

    var promise = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('FULFILLED!')
      }, 300);
    });
    
    promise.then((r) => {
      console.log(r)
    });

    【讨论】:

      【解决方案3】:

      setTimeout 回调应该调用fulfill("FULFILLED!")

      【讨论】:

        【解决方案4】:

        你可以使用下面的语法

        promise.then(res => {
              console.log("fulfilled");
            }, err => {
              console.log("rejected");
            });
        

        【讨论】:

          【解决方案5】:

          var promise = new Promise(function (fulfill, reject) {
            setTimeout(() => fulfill('FULFILLED!'), 300);
          });
          
          promise.then((r)=> console.log(r));

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-17
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 1970-01-01
          • 1970-01-01
          • 2018-03-27
          相关资源
          最近更新 更多