Chcę zaimplementować podstawowy obiekt Odroczony bez użycia jQuery. Tutaj będę realizować tylko wykonanych i niepowodzeniem wywołań zwrotnych, z funkcjami rozstrzygania i odrzucania. i ofCourse kojarzenia metody promise
z tą funkcją.Implementacja Odroczony obiekt bez użycia jquery
robię następującą implementację w czystym JS (red):
function Deferred() {
var d = {};
d.resolve = function() {
d.done(arguments);
}
d.reject = function() {
d.fail(arguments);
}
d.promise = function() {
var x = {};
x.done = function(args) {
return args;
}
x.fail = function(args) {
return args;
}
return x;
}
return d;
}
var v;
var setVal = function() {
var d = new Deferred();
setTimeout(function() {
v = 'a value';
d.resolve(this);
}, 5000);
return d.promise();
};
setVal().done(function() {
console.log('all done :' + v);
});
Ale przede daje błąd: Object #<Object> has no method 'fail'
Znam zwrócony obiekt „D” Deferred()
funkcji nie ma metoda done(). A jeśli zwrócę d.promise z Deferred()
, to nie będzie miało funkcji rozstrzygania i odrzucania.
Proszę wskazać, jaki błąd popełniam, aby osiągnąć prosty cel obiektu Odroczony obiekt.
Oto skrzypce robię: http://jsfiddle.net/SyEmK/14/
Jeśli utworzyć instancję z 'new' następnie należy dodać do metody' prototype'. Konstruktor zwraca instancję, nawet jeśli 'return d'. Możesz chcieć 'var d = Deferred()' – elclanrs
Nie masz metody o nazwie done. Jeśli spojrzysz na swój obiekt, masz postanowienie, odrzucenie i obietnicę. setVal() zwraca instancję twojego obiektu tymi trzema metodami. – THEtheChad
jQuery nie jest jedyną biblioteką, która realizuje obietnice. – JayC