Я использую es6 и хочу создать диалоговое окно отложенного подтверждения:
Код: Выделить всё
// First, create an empty promise:
let promise = new Promise((resolve, reject) => {})
// Then, show the dialog:
let $dialog = $('#dialog-confirm').show();
// FAIL: I want to trigger the promise resolver, but failed.
$dialog.find('.btn-yes').click(() => { promise.resolve(); })
$dialog.find('.btn-no').click(() => { promise.reject(); })
Необработанная ошибка типа: обещание.resolve не является функцией(…)
2. Рабочий код jQuery:
При использовании jQuery мы можем сделать следующее:
Код: Выделить всё
// First, create an empty promise:
var dfd = $.Deferred();
var promise = dfd.promise();
// Then, show the dialog:
var $dialog = $('#dialog-confirm').show();
// SUCCESS: jQuery deferred works
$dialog.find('.btn-yes').click(() => { dfd.resolve(); })
$dialog.find('.btn-no').click(() => { dfd.reject(); })
Поэтому я искал ES6 EDITION deferred:
https://github.com/seangenabe/es6-deferred
Но все равно получил ошибку:
undefined: 1 Неперехваченный (в обещании) объект {}
Фактически, код просто сохраняет внутреннее разрешение и функцию отклонения снаружи с помощью замыкания:
https://github.com/seangenabe/es6-defer ... eferred.js
Та же стратегия, если я это сделаю:
Код: Выделить всё
let dfd = {};
let $dialog = $('#dialog-confirm').show();
let promise = (function() {
return dfd.promise = new Promise(function(resolve, reject) {
dfd.resolve = resolve;
dfd.reject = reject;
});
})();
// FAIL: still not working.
$dialog.find('.btn-yes').click(() => { dfd.resolve(); })
$dialog.find('.btn-no').click(() => { dfd.reject(); })
Подробнее здесь: https://stackoverflow.com/questions/384 ... y-deferred
Мобильная версия