Ich verwende es6 und möchte einen verzögerten Bestätigungsdialog erstellen:
Code: Select all
// 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(); })
Uncaught TypeError: Promise.resolve is not a function(…)
2. jQuery-Arbeitscode:
Wenn Sie jQuery verwenden, können wir Folgendes tun:
Code: Select all
// 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(); })
Also habe ich nach einer ES6-AUSGABE von verzögert gesucht:
https://github.com/seangenabe/es6-deferred
Aber ich habe immer noch eine Fehlermeldung erhalten:
undefiniert:1 Nicht erfasst (in Versprechen) Objekt {}
Tatsächlich besteht der Code nur darin, die innere Auflösungs-- und Ablehnungsfunktion mithilfe von Schließung nach außen zu halten:
https://github.com/seangenabe/es6-defer ... eferred.js
Die gleiche Strategie, wenn ich das tue:
Code: Select all
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(); })
Mobile version