何时或谁通过解决并拒绝JS承诺的功能?

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中使用.

Que*_*tin 5

最让我烦恼的是谁将 Resolver 和 Reject 函数传递给 promise 构造函数?

没有人。

这些函数promise 构造函数传递。

它们被传递作为第一个参数传递给 promise 构造函数的函数。


Ori*_*ori 5

Promise 构造函数通过回调进行初始化,构造函数在调用回调时将rejectresolve作为参数传递。

这是一个简单的演示:

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)