Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deferred.pipe()を呼ぶとfailコールバックを登録しなくても、commonFailHandlerが呼ばれない #210

Closed
fukudayasuo opened this issue May 29, 2013 · 1 comment
Assignees
Labels
Milestone

Comments

@fukudayasuo
Copy link

pipe()に第二引数を指定しなければfailコールバックは登録されないので、reject()されたときにcommonFailHandler(以下CFH)が呼ばれるはずであるが、以下のようなコードで呼ばれない。

// CFHは設定済み
var dfd = h5.async.deferred();
dfd.pipe(); // 引数なしなのでfailコールバックは登録していない扱いのはず
dfd.reject();
// CFHが呼ばれない

原因は、jQuery.deferredのfailをFW側で差し替えており、その状態でpipe()を呼ぶと、pipe()の引数に関わらずjQuery内部から差し替えた方のfailが呼ばれる。よってfailコールバックが登録された扱いになってCFHが呼ばれなくなる。

そのため、jQueryのもともとのpipeを呼ぶ前に、fail(その他差し替えた関数)をもともとの関数に戻し、pipeの処理が終わったら、差し替えた関数を元に戻す、というような動作にする。

そうすればjQuery内部から差し替えた関数を使用されることは無くなる。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 29, 2013
@ghost ghost assigned fukudayasuo May 29, 2013
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 29, 2013
@fukudayasuo
Copy link
Author

jQueryオリジナルの関数を呼ぶためのメソッド__fwInternalCallをpromise/deferred下に置くようにしました。

promise.__fwInternalCall('fail', function(){});
promise.__fwInternalCall('then', function(){}, function(){}, function(){});

FW内部からの使用を想定しており、コールバックを登録してもCFHを発火するかどうかには影響させたくない場合に使用します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants