2017-06-23 10 views
1

ネストされたコールバックがたくさんあるコードブロックがあります。私は、コードリファクタを読みやすくし、コードを膨らませないようにすることに興味があります。誰かが下のコードを約束に変換する方法を教えてください。私はそのようなコードのコールバックがで約束のあるコードで後続のコールバックを回避する方法

dataApi.getClientEntityByCtnId(Number(key), function (error, client1) { 
    if (error) return callback(error, null); 
    if (client1.id == 0) 
     return callback("unregistered client:"+ key, null); 
    dataApi.getClientEntityByCtnId(Number(key2), function (error, client2) { 
     if (error) 
      return callback(error, null); 
     if (client2.id == 0) 
      return callback("unregistered client:" + key2, null); 

     dataApi.setClientRelationshipEntity(client1.id, client2.id, function (error) { 
      if (error) return callback(error, null);       
      dataApi.setClientRelationshipEntity(client2.id, client1.id, function (error) { 
       nbCRpushed++; 
       if (nbCRpushed%1000==0) dataApi.logger.info("nb CR pushed into BC ="+nbCRpushed+"/" + dataApi.nbCR); 
       if (error) return callback(error, null); 

       if (nbCRpushed == dataApi.nbCR) 
       { 
        dataApi.pushCRToCache(callback); 
       } 
      }); 
     }); 
    }); 
}); 
+1

[既存のコールバックAPIを約束に変換するにはどうすればいいですか?](https://stackoverflow.com/q/22519784/1048572)を読んでいますか? – Bergi

答えて

0

さらにもっと派手に実装されているコード全体に約束を適用する努力の価値があるかどうかを確認するために比較をしたい非同期/待つ

async function optimised(){ 
    var client1 = await dataApi.getClientEntityByCtnId(+key); 
    if (client1.id == 0) 
    throw new Error("unregistered client:"+ key); 
var client2 = await dataApi.getClientEntityByCtnId(+key2); 
if (client2.id == 0) 
    throw new Error("unregistered client:" + key2); 

await dataApi.setClientRelationshipEntity(client1.id, client2.id); 
await dataApi.setClientRelationshipEntity(client2.id, client1.id); 

//i think the code below is broken now... more info needed to make it work asyncly 
nbCRpushed++; 
if (nbCRpushed%1000==0) dataApi.logger.info("nb CR pushed into BC ="+nbCRpushed+"/" + dataApi.nbCR); 
if (nbCRpushed == dataApi.nbCR){ 
       dataApi.pushCRToCache(callback);//um callback? what should we do here?? 
} 
} 

使用できるようにこの:すべてのdataApi方法は、この作品を作るための約束を返す必要があること

optimised().then(function(){ 
    console.log("sucess"); 
},function(error){ 
    console.error(error); 
}); 

が注...

関連する問題