Mentre altri suggerimenti qui funzionano, personalmente preferisco quanto segue.
Promise.resolve(function(){
if (condition) return fs.writeFileAsync(file, jsonData);
}())
.then()
ha lo svantaggio di creare sempre questa promessa aggiuntiva (piuttosto minore IMO), ma sembra molto più pulito al mio occhio. È inoltre possibile aggiungere facilmente altre condizioni/logica all'interno dell'IIFE.
EDIT
Dopo aver implementato le cose come questo per lungo tempo ho decisamente cambiato a qualcosa di un po 'più chiaro. La promessa iniziale viene creato a prescindere quindi è molto più chiaro semplicemente fare:
/* 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
In realtà, nel tuo caso sarebbe semplicemente
if (someCondition) return somePromise;
all'interno del primo .then() funzione.
Promise è progettato per il controllo delle attività asincrone. Perché usare la sincronizzazione sync? Puoi semplicemente controllare il valore di ritorno di 'writeFileAsync'. – CodeColorist