从Promise返回false:它应该解析(false)还是拒绝()?

时间:2018-02-15 16:00:15

标签: error-handling promise

我正在通过HTTP向服务器发出请求,以查看是否存在具有特定电子邮件的用户。

function userExists(id) {
    return makeHttpRequestToServer(id)
        .then((response) => {
            if (response === 200) {
                // User exists in the database
            } else if (response === 404) {
                // User does not exist in the database
            }
        });
}

我不确定如何处理resolve / reject来电:

  • 我应该在数据库中找到用户时resolve(),在数据库中找不到用户时reject()吗?
  • 我应该在数据库中找到用户时resolve(true),在数据库中找不到用户时accept(false)吗?

1 个答案:

答案 0 :(得分:4)

您应该使用resolve返回任何非错误响应,reject仅用于错误和例外。

在数据库中搜索不包含该条目的特定条目不一定是错误,因此您应该resolve(false)

function userExists(id) {
    return makeHttpRequestToServer(id)
        .then((response) => {
            if (response === 200) {
                // User exists in the database
                resolve(true);
            } else if (response === 404) {
                // User does not exist in the database
                resolve(false);
            } else {
                // Something bad happened
                reject(new Error("An error occurred"));
            }
        });
}

这样可以更容易区分返回false和发生错误。

处理回调时,通常会保留第一个返回的错误响应参数,以及返回值的其余参数。

function userExists(id, callback) {
    makeHttpRequestToServer(id)
        .then((response) => {
            if (response === 200) {
                // User exists in the database
                callback(undefined, true);
            } else if (response === 404) {
                // User does not exist in the database
                callback(undefined, false);
            } else {
                // Something bad happened
                callback(new Error(response));
            }
        }
}