オブジェクトを作成する関数がありdeferred
ます。Onfail
では、フォールバック関数を呼び出しています。これは、独自のdeferred/promise
オブジェクトを作成して返します。このフォールバックの結果を返したいのですが、最初の呼び出しでdeferred
しか返すことができません。error
これが私がやっていることです:
// method call
init.fetchConfigurationFile(
storage,
"gadgets",
gadget.getAttribute("data-gadget-id"),
pointer
).then(function(fragment) {
console.log("gotcha");
console.log(fragment);
}).fail(function(error_should_be_fragment) {
console.log("gotcha not");
console.log(error_should_be_fragment);
});
私のfetchConfiguration
呼び出しは localstorage からロードしようとし、必要なドキュメント/添付ファイルが localstorage にない場合はファイルからのロードにフォールバックします。
init.fetchConfigurationFile = function (storage, file, attachment, run) {
return storage.getAttachment({"_id": file, "_attachment": attachment})
.then(function (response) {
return jIO.util.readBlobAsText(response.data);
})
.then(function (answer) {
return run(JSON.parse(answer.target.result))
})
.fail(function (error) {
// PROBLEM
console.log(error);
if (error.status === 404 && error.id === file) {
return init.getFromDisk(storage, file, attachment, run);
}
});
};
私の問題は、問題なくキャッチできることですが404
、オブジェクトを返す代わりに、error
によって生成されたプロミスを返したいinit.getFromDisk
です。
質問:エラー ハンドラで呼び出し
の結果を返すことはできますか? getFromDisk
そうでない場合、最初のメソッド呼び出しに常に promise を返すように、どのように呼び出しを構成する必要がありますか?
手伝ってくれてありがとう!
解決策:
助けてくれてありがとう! 次のように修正しました。
init.fetchConfigurationFile(
storage,
"gadgets",
gadget.getAttribute("data-gadget-id"),
pointer
).always(function(fragment) {
console.log("gotcha");
console.log(fragment);
});
init.fetchConfigurationFile = function (storage, file, attachment, run) {
return storage.getAttachment({"_id": file, "_attachment": attachment})
.then(function (response) {
return jIO.util.readBlobAsText(response.data);
})
.then(
function (answer) {
return run(JSON.parse(answer.target.result));
},
function (error) {
if (error.status === 404 && error.id === file) {
return init.getFromDisk(storage, file, attachment, run);
}
}
);
};