【发布时间】:2017-02-24 02:12:39
【问题描述】:
我已经开始学习 javascript promises。但我就是无法理解承诺的概念。 最困扰我的是谁将 Resolver 和 Reject 函数传递给 promise 构造函数?
查看这个 Promise 示例:
function getImage(url){
return new Promise(function(resolve, reject){
var img = new Image()
img.onload = function(){
resolve(url)
}
img.onerror = function(){
reject(url)
}
img.src = url
})
}
现在谁会通过 resolve 和 reject 方法,因为我对 javascript 的理解告诉我这个脚本会抛出未知变量错误,因为 resolve 和 rejects 没有定义?
getImage('doggy.jpg').then(function(successurl){
document.getElementById('doggyplayground').innerHTML = '<img src="' + successurl + '" />'
}).catch(function(errorurl){
console.log('Error loading ' + errorurl)
})
现在你看到了像上面这样的方法,传递这些方法(resolve 和 reject)的唯一方法是通过 then 和 catch,就像上面对 getImage 的方法调用中使用的那样。
【问题讨论】:
-
resolve和reject是您传递给Promise的函数的参数。Promise本身调用这个函数并传入两个参数。 -
比较:
function cb(resolve, reject) { ... }; new Promise(cb);——这有帮助吗……? -
@deceze 它确实帮助了我,但是我仍然对一件事感到困惑,那么为什么使用“then”和“catch”来传递其他方法?它们的工作方式就好像传入的方法是解析和拒绝方法一样?
-
是的,而不是调用
resolve,然后调用你的then回调,你可以直接调用你的then回调。本质上是一样的。 然而,promise 使您能够组合(链接)此类回调,如果您直接调用回调,这些方法很快就会变得非常复杂。 特别是如果您考虑到错误处理的复杂性,它承诺使用可链接的catch回调很容易解决。
标签: javascript promise