我在回顧AJAX方法中的承諾並查看如何使用它們使我的代碼更易於閱讀/功能。我目前的場景是有一個函數getBookIds
,它向數據庫發出一個AJAX調用,以基於它的ID返回一本書的標題。表中有五本書和一個錨標籤,其文本屬性對應於每本書。一旦所有錨點標籤被點擊,我想要一些其他花哨的AJAX方法。下面是我到目前爲止有:返回在點擊處理程序中使用的承諾
HTML
<a href="#">1</a>
<a href="#">3</a>
<a href="#">4</a>
<a href="#">5</a>
<a href="#">7</a>
JS
//hacky globals
var bookArray = [];
bookArray.length = $('a').length;
//ajax function
function getBookIds(data) {
return $.ajax({
type: "POST",
url: "Service.asmx/GetBookById",
data: JSON.stringify({
'titleId': data
}),
dataType: "json",
contentType: "application/json"
});
}
//click handler
$('a').on('click', function() {
var index = $('a').index($(this));
var titleId = $(this).text();
getBookIds(titleId).done(function (results) {
bookArray[index] = results.d;
var isEmpty = arrayChecker(bookArray);
fancyAjax(isEmpty);
});
});
//checks for undefined values in the array
function arrayChecker(array) {
var isEmpty = 0;
$.each(array, function (key, val) {
if (val === undefined) {
isEmpty++;
}
});
return (isEmpty > 0);
}
//bool comes from arrayChecker if no undefined then go AJAX
function fancyAjax(bool) {
if (!bool) {
alert('alert message for fancy stuff');
}
}
這是一個人爲的例子,但我掙扎,看我怎麼可能把這些承諾變成我的日常工作。這只是一個不好的例子,首先利用承諾/延期的力量?看起來,而不是在AJAX回調success
,而不是我所有的邏輯捲起了done
。任何有關解決這個問題的建議?
大的問題,但它屬於:http://codereview.stackexchange.com/ –
@JohnStrickler不是代碼的每一個問題屬於在代碼審查。他詢問一個概念,代碼是一個不是生產代碼的例子。這個問題是在這裏的主題,它甚至不是一個壞的:) –
@JohnStrickler我在那裏發帖,我很高興將它遷移到最合適的地方。 – wootscootinboogie