其他分享
首页 > 其他分享> > 匿名函数参数

匿名函数参数

作者:互联网

我的代码中有一个部分看起来像这样

var locationDefer = $.Deferred();

if (saSel.Company === -1) {
    database.getAllLocations().then(function (result) {
        var locations = JSON.parse(result.d);
        locationDefer.resolve(locations);
    });
} else {
    database.getLocationsForCompany(saSel.Company).then(function (result) {
        var locations = JSON.parse(result.d);                   
        locationDefer.resolve(locations);
    });
}

但是,由于两次基本相同,只是使用不同的ajax调用-有没有办法让匿名函数部分

function (result) {
    var locations = JSON.parse(result.d);
    locationDefer.resolve(locations);
})

声明为实函数,然后在.then()子句中调用,或者我能以某种方式提供数据库对象的被调用函数吗?

对于后者,我在脑海中有些想法可能看起来像这样,但是我不知道如何执行最后一行.

if(saSel.Company === -1) {
    fun = 'getAllLocations';
    arg = null;
} else {
    fun = 'getLocationsForCompany';
    arg = saSel.Company;
}

// database.fun(arg).then(function (result) {...});

解决方法:

您可以定义一个函数并将其引用作为成功回调处理程序传递

//Define the function handler
function resultHandler(result) {
    var locations = JSON.parse(result.d);
    locationDefer.resolve(locations);
}

if (saSel.Company === -1) {
    fun = 'getAllLocations';
    arg = null;
} else {
    fun = 'getLocationsForCompany';
    arg = saSel.Company;
}

//Invoke the method using Bracket notation
//And, pass the success handler as reference
database[fun](arg).then(resultHandler);

此外,由于getLocationsForCompany()和getAllLocations()返回一个Promise,因此您不应使用$.Deferred()直接返回Promise

return database[fun](arg);

标签:apply,anonymous-function,javascript
来源: https://codeday.me/bug/20191111/2018081.html