0
からの約束を待つ.each 。
成功時にjsonを返すajax呼び出しがあります。 ブロックこの非同期関数を非同期関数検証に送信しています。
私はスクリプトをロードしていると私は 可用性機能に送る各オブジェクトのために、私が完了すると値を返すために可用性を待ちたい、リターンです各値はに 押されているvalidation()
で
私は最後にそれを送信したい配列。
コールバックの実装に問題があります。
var validArr = [];
function checkStory(callback) {
$.ajax({
url: "",
type: "GET",
data: "",
async: true,
headers: {
Accept: "application/json"
},
success: function(data) {
if (data.isDoc == true) {
_checkDoc(callback);
} else {
if (data.responseObj) {
validation(data.responseObj);
} else {
callback(data.count);
}
}
},
error: function(err) {
console.log("No books");
}
});
}
function validation(responseObj) {
getScript('books.js',
function() {
$.each(responseObj, function(_index, _value) {
var res = aviliabilty(_value);
if (res) {
validArr.push(_index, true);
} else {
validArr.push(_index, false);
}
});
//return after all objects completed execution
return validArr;
}
);
}
function aviliabilty(entry) {
DM.ct.get(entry, function(response) {
if (response) {
for (var idx = 0, adLen = response.ds.length; idx < adLen; idx++) {
var bk = response.ds[idx];
for (var creaIdx = 0, crea = bk.creatives.length; creaIdx < crea; creaIdx++) {
var creative = bk.creatives[creaIdx];
if (creative.type == "line") {
for (var mfIdx = 0, mfLen = creative.Files.length; mfIdx < mfLen; mfIdx++) {
var mediaFile = creative.Files[mfIdx];
if (mediaFile.type == "horror") {
return true;
}
}
} else if (creative.type != "horror") {
return false;
}
}
}
}
});
}
// a function to get the script asynchronously
function getScript(url, success) {
var script = document.createElement('script');
script.src = url;
var head = document.getElementsByTagName('head')[0],
done = false;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
done = true;
success();
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
、なぜあなたは '検証()'であるたびに、それを呼ぶのですかと呼ばれる? '_checkDoc()'とは何ですか?誰が 'checkStory()'を呼び出しますか? – Tomalak
@ Tomalakのコメントに加えて、 'DM.ct'とは何ですか? –
@Tomalak、_checkDoc()およびcheckStory()は、現在のスクリプトでは他の関数であり、自分のフローでは使用されていません。検証は毎回呼び出されるのではなく、検証で私は応答内の各オブジェクトに対してaviliabilty()を実行しています。 DM.ctは外部スクリプトの関数です。 – ohadsas