lesen Sie irgendwo dieses Beispiel:
return new Promise( (resolve, reject) => {
fs.readFile(file, (err, data) => {
if (err) reject(err)
return resolve(data)
})
})
aber ich mache das normalerweise:
return new Promise( (resolve, reject) => {
fs.readFile(file, (err, data) => {
if (err) reject(err)
resolve(data)
})
})
ist da ein Unterschied?
return resolve()
beendet einfach die Funktionsausführung als normale return
, die nur vom Code-Fluss abhängt. Wenn Sie nicht mehr Code in Ihrer Funktion ausführen möchten, müssen Sie die Funktion mit einer return
beenden
return new Promise( (resolve, reject) => {
fs.readFile(file, (err, data) => {
if (err) reject(err)
return resolve(data)
console.log('after return') // won't execute
})
})
nur resolve
erstellt einen erfolgreichen Versprechungsstatus, führt jedoch die Codeausführung aus, wenn return
nicht verwendet wird.
Denken Sie daran, dass resolve()
und reject()
den Versprechungsstatus erstellen. Sie können nicht geändert werden, sobald der Status erstellt wurde. .then
- und .catch
-Handler werden für die weitere Ausführung verwendet. Die Verwendung von return
hängt von Ihrem Code-Fluss ab. Wenn Sie nicht mehr Code in diesem Block ausführen möchten, ist return resolve()
return new Promise( (resolve, reject) => {
fs.readFile(file, (err, data) => {
if (err) reject(err)
resolve(data)
console.log('after return') // will execute
})
})
es ist genau das gleiche wie eine normale return
-Anweisung in einer function
und hat nichts mit einem Versprechen zu tun
Es macht hier keinen Unterschied, aber wenn Sie etwas nach der Lösung erledigen wollen, siehe Beispiele unten auf der MDN-Seite: https://developer.mozilla.org/de/docs/Web/JavaScript/Referenz/Globale_Objekte/Versprechen/Auflösung