缓存承诺导致Node.js中的未处理承诺拒绝

时间:2017-02-23 20:57:58

标签: node.js promise warnings

使用nodejs v.7.5.0我得到了 UnhandledPromiseRejectionWarning&& DeprecationWarning 我从节点6.6开始就知道它的一部分新功能,但我不明白的是我在将它缓存到变量之后就抓住了这些承诺。如果我不缓存它,则不会发出警告。 这是抛出错误的代码:

    let verifyPromise = verifyToken(id_token);

    verifyPromise.catch((err) => {
        log(err);
    });

    let verifyOkPromise = verifyPromise.then((login) => {

        return DB_API.getTokenById(id_token);;
    });

    verifyOkPromise.catch((err) => {
        log('error in finding token: ', err);
    });


    verifyOkPromise.then((dbRes) => {
        log('loggin res in finding token: ', dbRes);
    });

其中verifyToken()是一个检查google身份验证令牌并返回承诺的函数。 节点输出如下:

error in finding token:  { CouchbaseError message: 'The key does not exist on the server', code: 13 }
(node:10961) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): CouchbaseError: The key does not exist on the server
(node:10961) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

正如你所看到的那样,承诺错误分支会定期捕获,因为它按预期记录但我仍然收到警告!!!!

而如果我只是追加这样的捕获:

 verifyPromise.then((login) => {
        return DB_API.getTokenById(id_token);;
    }).catch((err) => {
        log('error in finding token: ', err);
    });

没有警告!!!  我想我错过了一些微妙的东西,但我不明白可能是什么。 有人有任何线索吗? 提前谢谢

0 个答案:

没有答案