ここでの問題は、ajax リクエストを使用して myBookmarks 変数に値を返す関数があることです。この変数は、残りの JavaScript (表示されていません) を実行する前に割り当てる必要があります。したがって、 async: false を設定するとうまくいきますが、Firefox では次のようになります。
XMLHttpRequest の withCredentials 属性の使用は、ウィンドウ コンテキストの同期モードではサポートされなくなりました。
setTimeout を使って解決策を模索してきましたが、setTimeout 内の無名関数がブックマークの値を上位関数に返すことができません。
問題は、index() 関数内で実行を一時停止し、ブックマークの値を async: false を使用せずに上位レベルの myBookmarks var に戻す方法です。
var myBookmarks = index();
function index() {
var bookmarks = false;
$.ajax({
xhrFields: {
withCredentials: true
},
crossDomain: true,
async: false,
url: BOOKMARKS_URL,
contentType: 'application/json',
dataType: 'json',
success: function(data){
if (!data.errors) {
// INDEX SUCCESS
bookmarks = data;
} else {
// INDEX FAILURE
}
}
});
return bookmarks;
}