尝试将回调示例重写为Prom

时间:2019-01-15 15:31:27

标签: javascript node.js

我正在尝试使用非常简单的示例来了解回调和Promise。我想出了如何将为什么需要回调的示例重写为有效的“回调形式”的示例。但是,我坚持将其重写为一个诺言

我已尝试按照此处的示例来完成这项工作:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#Basic_Example

但是我在使其工作上遇到了一些麻烦。

首先,我得到了这段代码,说明了为什么回调很重要:

function first(){
  // Simulate a code delay
  setTimeout( function(){
    console.log(1);
  }, 500 );
}

function second(){
  console.log(2);
}

first();
second();

然后我使用回调将其重写:


function first(callback){
  // Simulate a code delay
  setTimeout( function(){
      console.log(1);
      callback();
  }, 500 );

}

function second(){
  console.log(2);
}

first(second);
// second();


现在,我想知道如何将其重写为一个承诺。


let first = new Promise( function (resolve, reject){
    // Simulate a code delay
  setTimeout( function(){
      console.log(1);
      resolve('success')
  }, 500 );
});

function second(){
  console.log(2);
}

first.then(second());


我希望它输出的是第一个1,然后是2,现在它是输出2,然后是1。

1 个答案:

答案 0 :(得分:2)

这是应该执行您所要求的代码。 代码中的问题是您实际上实际上是在立即调用second():

first.then(second());

而不是将函数作为参数传递({then()将在第一个promise解析后调用它):

let first = new Promise( function (resolve, reject){
    // Simulate a code delay
  setTimeout( function(){
      console.log(1);
      resolve('success')
  }, 500 );
});

function second(){
  console.log(2);
}

first.then(second);