Javascript 如何避免在带有承诺的代码中拖尾回调

Javascript 如何避免在带有承诺的代码中拖尾回调,javascript,callback,promise,Javascript,Callback,Promise,我有一个包含大量嵌套回调的代码块。我对代码重构感兴趣,以使其更具可读性并避免代码膨胀。有人能告诉我如何将下面的代码转换成承诺吗。我想做一个比较,看看在实现这些代码回调的代码中应用承诺是否值得 dataApi.getClientEntityByCtnId(Number(key), function (error, client1) { if (error) return callback(error, null); if (client1.id == 0) retu

我有一个包含大量嵌套回调的代码块。我对代码重构感兴趣,以使其更具可读性并避免代码膨胀。有人能告诉我如何将下面的代码转换成承诺吗。我想做一个比较,看看在实现这些代码回调的代码中应用承诺是否值得

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);
                }
            });
        });
    });
});
使用async/await更别致:

可以这样使用:

optimised().then(function(){
   console.log("sucess");
},function(error){
  console.error(error);
});
请注意,所有dataApi方法都需要返回承诺,才能使此工作正常…

使用async/await时更为奇特:

可以这样使用:

optimised().then(function(){
   console.log("sucess");
},function(error){
  console.error(error);
});
请注意,所有dataApi方法都需要返回承诺才能实现此功能……

您阅读了吗?您阅读了吗?