如何。然后链,但需要从先前承诺的resolve()值 - JavaScript?
问题出在“后台登录检查”功能。我想.then()在“getUserByEmail”之后链接“ifUserIsDisabled”。但是我需要getUserByEmail中的“userRecord”来输入“ifUserIsDisabled”。如何。然后链,但需要从先前承诺的resolve()值 - JavaScript?
我也希望这两个函数在“backendLoginCheck”函数中共享相同的.catch。
目前代码:
function getUserByEmail(email){
return new Promise(function(resolve, reject){
firebase.serverAuthAdmin147th.getUserByEmail(email)
.then(function(userRecord) {
resolve(userRecord);
})
.catch(function (error) {
reject({token: null, errorCode: "auth/user-not-found"});
});
})
}
function ifUserIsDisabled(userRecord){
return new Promise(function(resolve, reject){
if(!userRecord.disabled){
resolve();
}
else{
reject({token: null, errorCode: "auth/user-disabled"});
}
})
}
function backendLoginCheck(email, password, callback){
var token = null;
var errorCode = null;
var uid = null;
getUserByEmail(email)
.then(function(userRecord){
ifUserIsDisabled(userRecord);
})
.catch(function(error){
callback(error);
});
}
期望理念:
...
getUserByEmail(email)
.then(ifUserIsDisabled(userRecord))
.then(nextFunction())
.then(nextFunction2(uses_resolveVal_from_nextFunction))
.then(nextFunctionEtc())
.catch(function(error){
callback(error);
});
如果我正确理解你,它看起来就像你几乎在那里。如果然后在承诺链返回另一个承诺可以通过解析值环比下滑
例如:
function firstFunction() {
return new Promise((resolve, reject) => {
if (someError) {
reject(firstErr)
} else {
resolve('first value')
}
})
}
function secondFunction() {
return new Promise((resolve, reject) => {
if (someError) {
reject(secondErr)
} else {
resolve('second value')
}
})
}
firstFunction()
.then((resolvedFirstValue) => {
return secondFunction()
})
.then((resolvedSecondValue) => {
console.log(resolvedSecondValue)
})
.catch((err) => {
// any error in the entire chain
console.error(err)
})
应该是这样的:
getUserByEmail(email)
.then(function(userRecord){
return ifUserIsDisabled(userRecord);
})
.then(nextFunction())
不解决我的问题。我已经在“当前代码”中。我想ifUserIsDisabled拒绝也使用后端的.catchLoginCheck –
如果你'返回'ifUserIsDisabled'它应该冒泡到'catch'问题。 –
哎呀错过了'回报'。 –
完美的是我正在寻找的。没有意识到它就像“回归”一样简单 –
很高兴帮助! – beardo34