Javascript承诺 - 隐式地解决(或)拒绝发生

时间:2015-01-05 03:03:11

标签: javascript promise

从chrome控制台,我使用本机JS承诺,它会自动解决,

var p = new Promise(
  function(resolve, reject){
    resolve(200)
})

返回

undefined

p.then(function(response){
  console.log(response)
})

返回

200

我认为,Promise.then用于注册解决(或)拒绝回调。但是,为什么在这种情况下它会触发解析回调函数。

2 个答案:

答案 0 :(得分:3)

  

为什么记录未定义?

因为var语句没有有用的返回值。例如,如果您键入var x = 5,您的控制台将记录undefined

  

为什么要解决?

因为您调用了resolve,这是您在promise构造函数中解析promise的方法。

var p = new Promise(function(resolve, reject){
    resolve(200)
});

var p = Promise.resolve(200)基本相同。这不仅明确地解决了它 - 它是解决它的唯一方法。如果您不想解决此问题,请删除resolve(200)行。

  

但是,在这种情况下,为什么它会触发解析回调函数。

如果您console.log(p)并删除then部分,则不会记录已解决的承诺。

答案 1 :(得分:1)

  

在这里,如何&解决承诺触发何时发生?

then回调是在event loop的下一个回合中执行的,如果它在promise结算之前附加的话。如果它在解决后附加,它将在下一回合执行,就像它被包裹在setTimeout(function () {}, 0)调用中一样。

  

至少在我的2行代码中,我没有明确解决它?

当你致电resolve时,是的,你正在解决这个承诺。