Я пытаюсь заполнить некоторые локальные данные, разрешая серию удаленных вызовов.
Когда каждое обещание разрешено, я загружаю данные и продолжаю.
Метод $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/поймать заявления, просто вызывает $q.all()
к полностью игнорировать запись, даже если не подведет (обратите внимание на console.log в FUNC) ...
$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, я пошел дальше. Реализация обратного вызова ошибки, я могу избежать разрыва цепи и нажать значения разрешенных обещаний.
Однако на консоли все еще отображается неприятное исключение ... Как я могу избавиться от этого, если я не могу попробовать/поймать асинхронные запросы?
код Caller
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
}
})
},
На самом деле, я все еще новичок в Angular, обещаниях и даже JS, и я более чем счастлив каждый день изучать новые вещи! Метод .catch() по-прежнему не блокирует исключение, которое я порою в моем последнем примере, но я думаю, что это самое близкое, что я могу достичь своего идеального результата. Спасибо! – domokun
@domokun угловые обещания неправильно сообщают даже пойманные исключения, нарушая дух обещаний/A +, если не нарушать спецификацию – Esailija
Полезно знать ... Думаю ... Thx again! – domokun