-1

我正在尝试承诺代码,但即使用户在数据库中不存在,它也总是返回我解决问题,任何人都可以帮助我修复我的代码和返回函数中的返回语句,第二个控制台日志只能工作。

这是我的代码

API 调用

const email = 't@t.com';
const request = require('request');
function IsUserExists(email, kc_accessToken) {
  let url = `${path}/users?email=${email}`;

  return new Promise(function (resolve, reject) {
    request(
      {
        url: url,
        headers: {
          'content-type': 'application/json',
          authorization: `Bearer ${kc_accessToken}`,
        },
      },
      function (error, response, body) {
        if (error) {
          console.log('some error occured');
        }
        if (response.body.length > 0) {
          console.log('User Exist');
          return resolve();
        }
        console.log('Does not Exist');
        return reject();
      }
    );
  });
}

函数调用

http
  .createServer(function Test() {
    getAccessToken()
      .then(function (response) {
        kc_accessToken = response.data.access_token;

        IsUserExists(email, kc_accessToken).then((resp) => {
          if (resp) {
            console.log('Do Not Create');
          } else if (!resp) {
            console.log('Creat a new User');
          }
        });
      })
      .catch(function (error) {
        // handle error
        console.log(error);
      })
      .then(function () {
        // always executed
      });
  })
  .listen(8081);

何时提供存在的用户电子邮件 (t@t.com)

在此处输入图像描述

何时提供不存在的用户电子邮件(09@t.com)

在此处输入图像描述

4

1 回答 1

1

我需要为您在评论中提出的问题创建一个新的答案。
现在,您进入拒绝功能,因此您需要在外部处理此拒绝。

if (response.body.length > 0) {
    console.log('User Exist');
    return resolve();
}
console.log('Does not Exist');
return reject(); // -> Now here you are

您需要.catchIsUserExists.then().
这将是IsUserExists.then().catch()

http.createServer(function Test() {
    getAccessToken()
        .then(function (response) {
            kc_accessToken = response.data.access_token;

            // here you only accept the data from resolve in Promise
            // so you need to add .catch function to handle the rejection.
            IsUserExists(email, kc_accessToken).then((resp) => {
                if (resp) {
                    console.log('Do Not Create');
                } else if (!resp) {
                    console.log('Creat a new User');
                }
            }).catch((error) => {
                console.log(error)
            });


        })
        .catch(function (error) {
            // handle error
            console.log(error);
        })
        .then(function () {
            // always executed
        });
})
.listen(8081);

顺便说一句,您可以在拒绝函数中添加参数,例如reject(new Error("user not found)).
然后在外面,你可以得到这个拒绝信息。

于 2020-11-08T08:31:21.047 回答