3
我在我的代碼段,看起來像這樣匿名函數參數
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);
})
聲明爲一個真正的功能,然後就稱爲了。那麼()子句,或可我莫名其妙地提供給被稱爲功能的數據庫對象?
對於後者,我腦海中有些東西可能看起來像這樣,但我不知道如何做最後一行。
if(saSel.Company === -1) {
fun = 'getAllLocations';
arg = null;
} else {
fun = 'getLocationsForCompany';
arg = saSel.Company;
}
// database.fun(arg).then(function (result) {...});
避免[deferred antipattern](https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-它)! – Bergi
「*有什麼辦法可以將匿名函數聲明爲真實函數,然後在.then()子句中調用*」 - 當然有!只要你傳遞一個函數作爲參數,沒有方法關心你使用的語法。你試過了嗎? – Bergi
請勿使用'fun'和'arg'。但是你可以簡單地存儲'database.getAllLocations()'或'database.getLocationsForCompany(saSel.Company)'返回一個變量的承諾,然後在該變量上調用'.then()'。 – Bergi