Promesse native JavaScript () sans rappel

Regardez ce code jQuery:

var promise = new Deferred(), some; some = function(promise) { // do cool things promise.resolve(); }; promise.then(/* callback cool things */); // init everything some(promise); 

Je ne suis pas sûr de l'exactitude de l'architecture d'une telle approche, mais je l'ai utilisé longtemps et c'est pratique pour moi.

Dans le JavaScript natif, je ne peux pas utiliser cette approche. Constructor new Promise() nécessite un paramètre de rappel, donc je ne peux pas passer l'instance de Promise comme paramètre.

Donc, ma question est la suivante: comment puis-je pré-définir la promesse native de JavaScript, la transmettre en tant que paramètre à fonctionner et à résoudre?

Le flux d'exécution serait un peu différent, mais fonctionne essentiellement de la même manière:

 function some(resolve, reject) { resolve(); } var promise = new Promise(some); promise.then(/* callback cool things */); 

Au lieu de faire passer la promesse elle-même, il passe les fonctions de resolve et de reject . Donc, la dépendance est juste l'inverse.

Voici une implémentation de base qui préserverait votre flux de demande tel quel.

N'utilisez pas cela dans la vie réelle – vous émertiez sur la sécurité de lancer (grâce à @BenjaminGruenbaum pour l'indice).

 var MyDeferred = function() { var _resolve, _reject, capturedPromise = new Promise(function(resolve, reject){ _resolve = resolve; _reject = reject; }); return { 'resolve' : _resolve, 'reject' : _reject, 'then' : function() { capturedPromise.then.apply(capturedPromise, arguments); }, 'catch' : function() { capturedPromise.catch.apply(capturedPromise, arguments); } } };