2017-05-30 112 views
0

我有一個帶有不同承諾的if-else條件。在邏輯選擇了哪個條件後,它將進入並履行承諾,我必須確保我的最終承諾得以執行。確保承諾在有條件承諾後執行

if (a < 5) 
 
{ 
 
    vm.promise1() 
 
    .then((data) => { 
 
     //do something with data 
 
    }) 
 
} 
 
else if (a > 5) 
 
{ 
 
\t vm.promise2() 
 
    .then((data) => { 
 
     //do something with data 
 
    }) 
 
} 
 
else 
 
{ 
 
\t vm.promise3() 
 
    .then((data) => { 
 
     //do something with data 
 
    }) 
 
}

現在我有vm.finalPromise()的條件後執行。我不想把每一個條件中的每一個諾言放在最後()。有沒有其他的實現?

感謝

+0

'var p;'超過您發佈的代碼。然後'p = vm.promise1 ....'等,最後,'p.then(....' –

回答

2

在我看來之後的任何其他的承諾,我會建議你保留它「Promisy」而不是將一個承諾存儲到一個變量中,調用一個返回一些承諾的函數。請注意,這只是一種風格偏好。

function doSomething() { 
    if (a < 5) { 
    return vm.promise1().then((data) => { 
     //do something with data 
    }); 
    } else if (a > 5) { 
    return vm.promise2().then((data) => { 
     //do something with data 
    }); 
    } else { 
    return vm.promise3().then((data) => { 
     //do something with data 
    }); 
    } 
} 

doSomething().then(() => { 
    // finally do something 
}); 
+0

標記爲答案。非常感謝:) – jengfad

1

創建一個變種持有任何這些承諾

使用它喜歡的if/else,如果等代碼

var p; 
if (a < 5) { 
    p = vm.promise1() 
    .then((data) => { 
     //do something with data 
    }) 
} else if (a > 5) { 
    p = vm.promise2() 
    .then((data) => { 
     //do something with data 
    }) 
} else { 
    p = vm.promise3() 
    .then((data) => { 
     //do something with data 
    }) 
} 
p.then((result) => { 
    // do your magic here 
});