如何.chain,但需要上一个promise-javascript中的resolve()值?

如何.chain,但需要上一个promise-javascript中的resolve()值?,javascript,error-handling,chaining,method-chaining,Javascript,Error Handling,Chaining,Method Chaining,问题在于“backendLoginCheck”函数。我想。然后()在“getUserByEmail”之后链接“ifUserIsDisabled”。但是我需要getUserByEmail中的“userRecord”作为“ifUserIsDisabled”的输入 我还希望两个函数共享相同的。catch in“backendLoginCheck”函数 当前代码: function getUserByEmail(email){ return new Promise(function(re

问题在于“backendLoginCheck”函数。我想。然后()在“getUserByEmail”之后链接“ifUserIsDisabled”。但是我需要getUserByEmail中的“userRecord”作为“ifUserIsDisabled”的输入

我还希望两个函数共享相同的。catch in“backendLoginCheck”函数

当前代码:

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 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);
    });
应该是这样的:

getUserByEmail(email)
.then(function(userRecord){
  return ifUserIsDisabled(userRecord);
})
.then(nextFunction())

如果我理解正确的话,看起来你就快到了。如果承诺中的then链返回另一个承诺,则可以将解析的值传递给该链

例如:

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)
  })

这不能解决我的问题。我在“当前代码”中已经有了。我希望ifUserIsDisabled reject也使用.catch in BackendLoginCheck如果
return
ifUserIsDisabled它应该冒泡到有问题的
catch
。Oops错过了
return
。这正是我想要的。没有意识到这就像“返回”一样简单,很高兴它有帮助!