use*_*778 5 javascript promise
我已经开始学习javascript承诺了.但我无法理解承诺的概念.最困扰我的是谁将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
})
}
Run Code Online (Sandbox Code Playgroud)
现在谁通过解决方法并拒绝方法,因为我对javascript的理解告诉我,这个脚本会抛出未知的变量错误,因为解析和拒绝没有定义?
getImage('doggy.jpg').then(function(successurl){
document.getElementById('doggyplayground').innerHTML = '<img src="' + successurl + '" />'
}).catch(function(errorurl){
console.log('Error loading ' + errorurl)
})
Run Code Online (Sandbox Code Playgroud)
现在你看到一个像上面这样的方法,这些方法(解析和拒绝)传递的唯一方法是通过then和catch在上面的方法调用getImage中使用.
最让我烦恼的是谁将 Resolver 和 Reject 函数传递给 promise 构造函数?
没有人。
这些函数由promise 构造函数传递。
它们被传递给作为第一个参数传递给 promise 构造函数的函数。
Promise 构造函数通过回调进行初始化,构造函数在调用回调时将reject和resolve作为参数传递。
这是一个简单的演示:
class PromiseDemo {
constructor(cb) {
cb(this.resolve.bind(this), this.reject.bind(this));
}
resolve(d) {
console.log('resolve', d);
}
reject(d) {
console.log('reject', d);
}
}
new PromiseDemo((resolve, reject) => {
Math.random() > 0.5 ? resolve('1') : reject('1');
});Run Code Online (Sandbox Code Playgroud)