Skip to content

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

@fukudayasuo

Description

@fukudayasuo

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内部から差し替えた関数を使用されることは無くなる。

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions