Меня больше всего беспокоит то, кто передает функцию Resolver и Reject в конструктор обещаний?
Никто.
Функции передаются от конструктора обещания.
Они также прошли в функцию вы передаете в качестве первого аргумента конструктора обещания.
Я начал изучать обещания javascript. Но я просто не понимаю понятия обещаний. Меня больше всего беспокоит то, кто передает функцию getImage (url) {return new Promise (функция (разрешение, отклонение)) {var img = new Image () img.onload = function () {resolve (url)} img. onerror = function () {reject (url)} img.src = url})} r и getImage ('doggy.jpg'), затем (function (successurl) {document.getElementById ('doggyplayground'). innerHTML = '< img src = "'+ successurl +'" /> '}). catch (function (errorurl) {console.log (' Ошибка загрузки '+ errorurl)}) для конструктора обещаний?
См. Этот пример обещания:
reject
Теперь кто выполняет методы разрешения и отклонения, так как мое понимание javascript говорит мне, что этот скрипт будет генерировать неизвестные ошибки переменных, поскольку разрешение и отклонения не определены?
resolve
Теперь вы видите метод, подобный описанному выше, единственный способ, которым эти методы (разрешить и отклонить) передаются, - это через и затем уловить, как используется в вышеприведенном вызове метода getImage.
Конструктор 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');
});
Библиотека обещаний создает и передает эти функции вместе со всеми другими метаданными, необходимыми для отслеживания обещаний и завершения записи, сохранения состояния и прогресса, отмены его и т. Д.
Люди за Bluebird опубликовали некоторую информацию о том, как библиотека работает внутри страны, и вы можете увидеть больше в источнике Bluebird .