Non è chiaro il motivo per cui si dovrebbe avvolgere un funzionamento sincrono in una promessa che rende solo più difficile da usare e operazioni sincrone può già essere utilizzato all'interno di catene promessa più che bene.
Gli unici due punti in cui ho ritenuto utile promettere qualcosa di sincrono sono l'avvio di una catena di promettenti in cui le operazioni successive saranno asincrone o in fase di ramificazione e un risultato del ramo è promessa asincrona e il l'altro è sincrono. Quindi, in questo caso, si desidera solo restituire una promessa in entrambi i casi in modo che il chiamante abbia un'interfaccia asincrona coerente indipendentemente dal ramo.
Oltre a ciò, in genere non si dovrebbero rendere asincroni le cose sincrone perché complicano inutilmente l'uso di esse.
Il modo più semplice che conosco per farne una promessa sarebbe questo:
Promise.resolve(path.join(path1, path2)).then(function(path) {
// use the result here
});
Per i vostri commenti, all'interno di un gestore .then()
, le eccezioni sono già catturati dall'infrastruttura promessa e trasformato in una promessa respinto . Quindi, se avessi questo:
someAsyncOp().then(function(value) {
// some other stuff
// something that causes an exception
throw new Error("timeout");
}).catch(function(err){
console.log(err); // will show timeout
});
Quindi, quell'eccezione è già mappata in un rifiuto di promessa per te. Naturalmente, se si desidera gestire l'eccezione all'interno del gestore .then()
(non trasformare la promessa in un rifiuto), è possibile utilizzare semplicemente un try/catch tradizionale attorno all'operazione sincrona per rilevare un'eccezione locale (non diversa da qualsiasi altra codice sincrono). Ma se vuoi che la promessa venga rifiutata se c'è un'eccezione nel gestore .then()
, allora tutto è fatto automaticamente (una caratteristica molto bella delle promesse).
Perché vuoi racchiudere una funzione sincrona in una promessa? –
Il test delle unità è un caso comune quando è necessario sostituire una chiamata asincrona con un valore codificato –
Il modo migliore per includere una funzione sincrona in una promessa non è farlo. – Bergi