我在javascript(jquery)
中有这段代码function getTopLevelId(gender) {
var catId = $.ajax({
type: 'GET',
url: '{url}'
dataType: 'html'
});
return catId; //Returns defered object
}
function getSelectedCategoryId() {
return 7; //returns int based on value in an element
};
function mainFuncion(id) {
if (parseInt(id) === 0) {
catObj= getTopLevelId(gender); //Returns defered object
}
else {
catId = getSelectedCategoryId(id); //Returns int
catObj = catId;
}
$.when(catObj).done(function(catId) {
//Doing some stuff and want to use catId as a category id
}
}
我的问题是在done()中做“做一些事”。 SEEMS 对我来说就像done()被调用并给我正确的类别ID,即使catId
只是一个int,但这总是如此吗?或者有没有其他方法可以“更安全”实现我在mainFunction中想要的东西?
答案 0 :(得分:5)
是。如果没有传递给$.when()
的参数是未解析的promise对象,则立即调用done
处理程序。
如果将单个参数传递给jQuery.when并且它不是Deferred 或承诺,它将被视为已解决的延期和任何 附加的doneCallbacks将立即执行。 doneCallbacks 传递原始参数。在这种情况下,任何failCallbacks你 可能设置永远不会被调用,因为延迟永远不会被拒绝。
var a = 7;
$.when(a).done(function (x) {
console.log('inside', x)
});
console.log('after')