我正在尝试填充一些本地数据,以解决一系列远程调用。
当每个诺言都得到解决后,我将加载数据并继续。
该方法$q.all( [] )
正是这样做的:
$q.all([
this.getUserInfo(11)
.then(function (r) {
results.push(r)
}),
this.getUserConns()
.then(function (r) {
results.push(r)
}),
this.getUserCtxs()
.then(function (r) {
results.push(r)
})
])
.then(function () {
console.log(results)
})
问题是,此代码不具有弹性。
如果这些呼叫中的任何一个失败,那么没人会得到鱼!
将调用包装在try / catch语句中,$q.all()
即使没有失败也只会导致完全忽略该条目(请注意func中的console.log)…
$q.all([
this.getUserInfo2(11)
.then(function (r) {
results.push(r)
}),
function () {
try {
this.getUserGroups()
.then(function (r) {
console.log(r)
results.push(r)
})
}
catch (err) {
console.log(err)
}
},
])
.then(function () {
console.log(results)
})
输出:
[目的]
关于如何包装它以增强弹性的任何提示?
感谢@dtabuenc,我走了更进一步。实现错误回调,我可以避免中断链,并推送已解决的Promise的值。
但是,控制台上仍显示令人讨厌的异常…如果无法尝试/捕获异步请求,该如何解决?
来电显示
return $q.all([
this.getUserInfo(user_id)
.then(function (r) {
results['personal_details'] = r
}),
this.getUserConns()
.then(
function (r) {
results['connections'] = r
},
function(err) {
console.log(err)
})
])
.then(function () {
return (results)
})
被叫方代码(注入异常)
getUserConns: function() {
return __doCall( ws.getUserConnections, {} )
.then( function(r) {
// very generic exception injected
throw new Error
if (r && r.data['return_code'] === 0) {
return r.data['entries']
}
else {
console.log('unable to retrieve the activity - err: '+r.data['return_code'])
return null
}
})
},
这将起作用,但也会将错误推送到阵列。
function push(r) {
results.push(r);
}
$q.all([
this.getUserInfo(11).then(push).catch(push),
this.getUserConns().then(push).catch(push),
this.getUserCtxs().then(push).catch(push)
])
.then(function () {
console.log(results);
})
您还应该提高对Promise的理解, 永远不要try-catch
与Promise一起使用-
使用Promise时,请使用.catch()
方法(其他所有内容都隐含a try
)。这适用于普通错误以及异步错误。
如果要完全忽略错误:
function push(r) {
results.push(r);
}
function noop() {}
$q.all([
this.getUserInfo(11).then(push).catch(noop),
this.getUserConns().then(push).catch(noop),
this.getUserCtxs().then(push).catch(noop)
])
.then(function () {
console.log(results);
})
问题内容: 我已经在angularjs中实现了$ q.all,但是我无法使代码正常工作。这是我的代码: 这是我的控制器,它调用服务: 我认为在我的服务中设置$ q.all存在一些问题。 问题答案: 在javascript中 不仅有 : 阅读有关javaScript作用域和提升的文章。 看看我如何调试您的代码: 当您在for循环内编写代码时,它会被 提升 到函数顶部,这意味着javascript在之
我在PHPMyAdmin中更改了我的“root”@“localhost”帐户的密码,并将自己锁定在浏览器的PHPMyAdmin之外。我正在使用WAMP 2.5。 在这个问题上提供的解决方案不适合我,因为不幸的是,我丢失了重新分配root的密码。 有些解决方案要求用户通过命令行(包括此源代码)重置密码,我曾尝试通过Windows命令行重置密码,但没有成功,因为我现在没有权限: WAMP附带了一个My
我刚刚继承了一个由7台服务器组成并通过Ambari管理的hadoop集群(以前从未使用过hadoop)。 今天Ambari对server3上的所有服务以及ZooKeeper服务(托管在服务器1、2和3上)、ZKFailover(托管在服务器1和2上)和ZooKeeper客户端(托管在4,5,6,7上)停止并全部拒绝启动。这也导致Solr服务停止工作。 经过一些调查,我发现server3上的ZooK
我正在尝试检查 22,800 年数据库中的 2012 个 url,以找出哪些仍然有效。我在 PyCharm 的 Python 3.8 中使用 urllib。它通过我读入的文本文件中的前 47 个 url。然后,当找不到主机时,它会崩溃。 这是错误输出: 回溯(最近一次调用):文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\l
MySQL的恢复 常用命令 利用source命令恢复数据库 利用mysql命令恢复(标准) gzip备份文件包的解压方式 常用命令 去除多余注释查看备份数据 egrep -v "#|\*|--|^$" ~/test.sql 利用source命令恢复数据库 进入到mysql数据库客户端,mysql -uroot -p登录后,使用source命令,后面跟脚本文件 source all.sql # 默认
我在AWS EC2上运行3个节点集群,我的一个节点崩溃了,重新启动后,我看到2900个未分配的碎片和集群状态为红色。 我将索引配置为有5个碎片和1个副本--我不明白为什么重新启动后碎片不能从副本中恢复。 我尝试使用elasticsearch重新路由API https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-