Look at this jQuery code:
var promise = new Deferred(),
some;
some = function(promise) {
// do cool things
promise.resolve();
};
promise.then(/* callback cool things */);
// init everything
some(promise);
I am not sure about architecture correctness of such approach, but I used it for long time and it is convenient for me.
In native JavaScript I can not use such approach. Constructor new Promise()
requires a callback parameter, so I can not pass instance of Promise
as a parameter.
So my question is: how can I predefine JavaScript native promise, pass it as a parameter to function and the resolve?
The execution flow would be a little different, but basically work the same way:
function some(resolve, reject) {
resolve();
}
var promise = new Promise(some);
promise.then(/* callback cool things */);
Instead of some
getting passed the promise itself, it gets passed the resolve
and reject
functions. So, the dependency is just the other way round.
Here's a basic implementation that would preserve your application flow as-is.
Do not use this in real life - you'd be missing out on throw safety (thanks to @BenjaminGruenbaum for the hint).
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); }
}
};
来源:https://stackoverflow.com/questions/23586425/javascript-native-promise-without-callback