Trong khi các đề xuất khác ở đây hoạt động, cá nhân tôi thích những điều sau đây.
Promise.resolve(function(){
if (condition) return fs.writeFileAsync(file, jsonData);
}())
.then()
Điều bất lợi là tạo ra lời hứa bổ sung này (thay vì IMO nhỏ) nhưng trông sạch sẽ hơn nhiều. Bạn cũng có thể thêm các điều kiện/logic khác một cách dễ dàng bên trong IIFE.
EDIT
Sau khi thực hiện điều như thế này trong một thời gian dài bây giờ tôi đã chắc chắn đã thay đổi một cái gì đó hơi rõ ràng hơn. Lời hứa ban đầu được tạo ra bất kể vì thế nó là rõ ràng hơn để chỉ cần làm:
/* Example setup */
var someCondition = (Math.random()*2)|0;
var value = "Not from a promise";
var somePromise = new Promise((resolve) => setTimeout(() => resolve('Promise value'), 3000));
/* Example */
Promise.resolve()
.then(() => {
if (someCondition) return value;
return somePromise;
})
.then((result) => document.body.innerHTML = result);
Initial state
Trên thực tế, trong trường hợp của bạn nó sẽ chỉ đơn giản là
if (someCondition) return somePromise;
bên trong .Sau đó đầu tiên() chức năng.
Hứa hẹn được thiết kế để điều khiển tác vụ không đồng bộ. Tại sao sử dụng fucntion đồng bộ? Bạn có thể chỉ cần kiểm tra giá trị trả về của 'writeFileAsync'. – CodeColorist