javascript - 如何.then链接,但需要前一个promise-JavaScript的resolve()值?

标签 javascript error-handling chaining method-chaining

问题在于“backendLoginCheck”功能。我想在“getUserByEmail”之后将.then()链“ifUserIsDisabled”。但是我需要getUserByEmail的“userRecord”作为“ifUserIsDisabled”的输入。

我也希望两个函数在“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);
    });

最佳答案

如果我正确地理解了您,则好像您快要到了。如果一个promise中的then链返回另一个promise,您可以将已解决的值向下传递

例如:

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

关于javascript - 如何.then链接,但需要前一个promise-JavaScript的resolve()值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835613/

相关文章:

javascript - 如何获取每个数组中的乘法结果

javascript - JQuery 日期选择器与自定义日期选择器

javascript - 使用正则表达式的谷歌地图链接验证

php - PHP 方法链接

JavaScript 链接函数/使用 IIFE 表达式扩展函数

javascript - paypal 支付 api 不适用于属性 "payee"

error-handling - 为什么断言是从生产构建中编译出来的(性能除外)?

python - 缺少一个参数时如何引发自己的错误?

我找不到的 PHP 语法错误

r - 在 Julia 中链接操作时显式指定参数