promise和nodebbacks——nodeback中的错误会返回promise.catch
Promises and nodebacks- error in node back goes back to promise.catch
在尝试将我的代码移动到承诺后,只使用回调,(没有破坏函数的接口)我遇到了一个问题。在这样的代码示例中:
function callMeWithCallback(args, next) {
Promise.resolve()
.then(()=> {
return next("some error will be thrown here");
}).catch((error)=> {
return next("Error in callMeWithCallback func");
});
}
callMeWithCallback(args, function(){
throw "some error";
})
发生的事情是,在解决callMeWithCallback函数中的承诺并调用回调一次后,抛出错误,代码返回callMeWithCallback函数中的catch并再次调用回调。
我希望函数callMeWithCallback只调用回调一次(无论是否发生错误)我需要暗示什么变化?
我强烈建议您使用像bluebird
这样的库来为您规范这一点-您的代码将是:
function callMeWithCallback(args, next) {
// in real code always reject with `Error` objects
var p = Promise.reject("some error will be thrown here");
p.asCallback(next); // converts a promise API to a callback one, `throw`s.
return p;
}
这保证了"next"最多只被调用一次。
如果你不想要bluebird,你可以自己实现:-
function asCallback(promise, callback) {
promise.then(v => callback(null, v), e => callback(e));
}
这将是好的,只要你保持调用在一个地方。重要的是不要把呼叫分派给"next"自己。
相关文章:
- 使用promise和mongoose对文档进行排序
- 测试Angular Service解决错误回调中的promise
- 节点协同与生成器和Promise并行流量控制
- 根据是否解析了 Promise 从函数返回值
- 将一个方法转换为promise:Nodejs
- 函数在promise被解析后被调用,但Jasmine未通过测试.为什么?
- js promise没有正确关闭
- Angularjs使用“;这个“;promise内的关键字回调
- AngularJS和promise值在调用本地函数时的效果-未定义
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 以同步方式获取Javascript Promise的值
- NodeJS和pg promise,捕获PostgreSQL异常
- AngularJS使用http进行promise处理
- Angular promise return"未定义的“;值.NET MVC
- Promise函数在.then之后未运行函数化
- 如何为javascript promise进行阻塞并返回解析结果
- 将其中一个异步方法重写为使用promise的方法
- 通过AngularJS promise下载一个文件
- 如何在AngularJS视图中使用promise(ng-show)
- 嵌套的promise节点js