私は同期(LocalStorage)から非同期(IndexedDB)にいくつかのデータベースコードを書き換えています。私はAlasqlライブラリとPromisesを使用しています。私が遭遇する問題の1つは、物事を非同期的に行うときに、コードの重複を避けることが不可能になることが時々あるということです。どのように非同期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);
});
}
});
}
コード内の2桁でdoSomething
に電話する必要があります。このような状況を避ける方法はありますか?これまでに尋ねられたことがあれば、私は約束と謝罪には新しいですが、私はこれに対する答えを見つけることができませんでした。
美しい(と私はそれを参照してください今明らか...)。ありがとうございます! –