jQueryを使わずに基本的なDeferredオブジェクトを実装したい。ここでは、resolve 関数と reject 関数を使用して、完了コールバックと失敗コールバックのみを実装します。そして ofCourse 関連付けpromise
メソッドをこの関数に関連付けます。
私は純粋なjs(編集済み)で次の実装を行っています:
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);
});
しかし、上記はエラーを与えます:Object #<Object> has no method 'fail'
関数の返されたオブジェクト 'd' にDeferred()
メソッド done() がないことはわかっています。そして、私がこれから d.promise を返す場合、Deferred()
解決および拒否機能はありません。
Deferredオブジェクトの単純な目的を達成するために私が犯しているエラーを指摘してください。
これが私がやっているフィドルです: http://jsfiddle.net/SyEmK/14/