我正在從同步(LocalStorage)重寫一些數據庫代碼爲異步(IndexedDB)。我正在使用Alasql庫和Promises。我遇到的一個問題是,當異步執行時,有時似乎不可能避免重複代碼。如何避免異步JavaScript中的冗餘代碼?
例如,我的同步(僞)代碼可能是這樣的(idExists,doUpdate和doInsert是數據庫的方法):
function insertOrUpdate(data,id)
{
var result = null;
if (!idExists(id)) // idExists returns a boolean
result = doInsert(data,id); // doInsert returns an object
else
result = doUpdate(data,id); // doUpdate returns an object
doSomething(result);
}
使用異步代碼,它變得像這樣:
function insertOrUpdate(data,id)
{
var promise1 = idExists(id); // idExists returns a promise
promise1.then(function(id_exists) {
if (id_exists) {
var promise2 = doInsert(data,id); // doInsert returns a promise
promise2.then(function(result) {
doSomething(result);
});
}
else {
var promise3 = doUpdate(data,id); // doUpdate returns a promise
promise3.then(function(result) {
doSomething(result);
});
}
});
}
在這裏,我必須在代碼中的兩個地方撥打doSomething
。有沒有辦法避免這種情況?如果以前有人問過我,我對承諾和新的道歉是新的,但是我找不到答案。
美麗(現在看來我明白了......)。謝謝你,先生! –