【问题标题】:JS Q library - defer error catchingJS Q 库 - 延迟错误捕获
【发布时间】:2014-02-27 18:02:57
【问题描述】:

我正在发现 Kris Koval Q 库,但我遇到了问题。看看这个简单的代码:

function getPromise1() {
    var deferred = Q.defer();
    setTimeout(function () {
        console.log('Promise 1 OK');
        deferred.resolve();
    }, 1000);
    return deferred.promise;
}


function getPromise2() {
    var deferred = Q.defer();
    setTimeout(function () {
        console.log('Promise 2 Failed');
        deferred.reject();
    }, 1000);
    return deferred.promise;
}

getPromise1()
    .then(getPromise2())
    .fail(function () {
        alert('Fail!');
    })
    .done();

我希望看到:

Promise 1 OK
Promise 2 Failed

然后显示警报“失败!”,但警报永远不会显示。相反,我在控制台中看到警告:

[Q] Unhandled rejection reasons (should be empty): ["(no stack) undefined"] 

为什么不处理拒绝,我该如何处理?

【问题讨论】:

  • 尝试添加这个。 Q.stopUnhandledRejectionTracking();使日志静音
  • 我认为 Q.reject 应该有一个错误实例作为原因。例如deferred.reject(new Error('rejected')); ?
  • 警告不是问题。问题是未处理错误 - 函数 .fail(...) 从未被调用。

标签: javascript promise deferred q


【解决方案1】:

then 函数中,您应该只传递getPromise2 函数,而不是getPromise2() 的结果

getPromise1()
    .then(getPromise2)            // NOTE: We are not calling it here
    .fail(function () {
        console.log('Fail!');
    })
    .done();

【讨论】:

  • 谢谢,你拯救了我的一天 :)
  • @luski 欢迎你 :) 请考虑accepting this answer,如果它对你有帮助:)
猜你喜欢
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 2013-09-11
  • 2013-09-27
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多