Require returning inside each then()
to create readable and reusable Promise chains (promise/always-return
)
💼 This rule is enabled in the following configs: ✅ flat/recommended
, ✅
recommended
.
Ensure that inside a then()
you make sure to return
a new promise or value.
See http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html (rule #5)
for more info on why that's a good idea.
We also allow someone to throw
inside a then()
which is essentially the same
as return Promise.reject()
.
myPromise.then((val) => val * 2)
myPromise.then(function (val) {
return val * 2
})
myPromise.then(doSomething) // could be either
myPromise.then((b) => {
if (b) {
return 'yes'
} else {
return 'no'
}
})
myPromise.then(function (val) {})
myPromise.then(() => {
doSomething()
})
myPromise.then((b) => {
if (b) {
return 'yes'
} else {
forgotToReturn()
}
})
You can pass an { ignoreLastCallback: true }
as an option to this rule to the
last then()
callback in a promise chain does not warn if it does not have a
return
. Default is false
.
// OK
promise.then((x) => {
console.log(x)
})
// OK
void promise.then((x) => {
console.log(x)
})
// OK
await promise.then((x) => {
console.log(x)
})
promise
// NG
.then((x) => {
console.log(x)
})
// OK
.then((x) => {
console.log(x)
})
// NG
var v = promise.then((x) => {
console.log(x)
})
// NG
var v = await promise.then((x) => {
console.log(x)
})
function foo() {
// NG
return promise.then((x) => {
console.log(x)
})
}