Prometti costruttore con rifiuto chiamata contro errore di lancio

Nel seguente codice:

var p1 = new Promise(function (resolve, reject) { throw 'test1'; }); var p2 = new Promise(function (resolve, reject) { reject('test2'); }); p1.catch(function (err) { console.log(err); // test1 }); p2.catch(function (err) { console.log(err); // test2 }); 

C’è qualche differenza tra l’uso di reject (in p2 ) da Promise api e il lancio di un errore (in p1 ) usando throw ?

È esattamente lo stesso?

Se è lo stesso, perché abbiamo bisogno di una richiamata reject allora?