从chrome控制台,我使用本机JS承诺,它会自动解决,
var p = new Promise(
function(resolve, reject){
resolve(200)
})
返回
undefined
p.then(function(response){
console.log(response)
})
返回
200
我认为,Promise.then用于注册解决(或)拒绝回调。但是,为什么在这种情况下它会触发解析回调函数。
答案 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
时,是的,你正在解决这个承诺。