do()也完成了对int的工作?

bes*_*rld 1 javascript jquery

我在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
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是在done()中做"做一些事情".它看起来就像done()被调用并给我正确的类别ID,即使catId它只是一个int,但这总是如此吗?或者有没有其他方法可以"更安全"来实现我在mainFunction中想要的东西?

Aru*_*hny 5

是.如果没有传递给它的参数$.when()是未解析的promise对象,则done立即调用该处理程序.

如果将单个参数传递给jQuery.when并且它不是Deferred或Promise,则将其视为已解决的Deferred,并且将立即执行任何附加的doneCallbacks.doneCallbacks传递原始参数.在这种情况下,永远不会调用您可能设置的任何failCallback,因为Deferred永远不会被拒绝.

var a = 7;
$.when(a).done(function (x) {
    console.log('inside', x)
});
console.log('after')
Run Code Online (Sandbox Code Playgroud)

演示:小提琴,小提琴2