匿名函数参数
Anonymous function argument
我的代码中有一段看起来像这样
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()
return 的承诺,您不应直接使用 $.Deferred()
return Promise
return database[fun](arg);
我的代码中有一段看起来像这样
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()
return 的承诺,您不应直接使用 $.Deferred()
return Promise
return database[fun](arg);