javascript – Angular $q然后地狱
作者:互联网
在angular的Q实现中,我们怎样才能使这种调用看起来更好?在这种情况下,d3加载与数据加载无关,它应该是平行的.
d3Q.init()
.then(function(d3) {
scope.loadHistoryData()
.then(function(data) {
scope.renderHistoryGram(target, data, d3);
});
});
这种有臭味的代码也难以测试,因为有多种承诺需要模拟.任何代码测试的最佳实践?
解决方法:
由于第二个承诺似乎不依赖于第一个承诺,因此您可以并行运行它们并在完成使用$q.all()之后调用函数.
$q.all({d3: d3Q.init(), data: scope.loadHistoryData()})
.then(function(result) {
scope.renderHistoryGram(target, result.d3, result.data);
});
在上面的例子中,我们创建了一个对象,因此我们可以使用键来引用每个promise的结果.您还可以传递一系列承诺.在数组(下面)的情况下,结果将是与promises顺序相同的结果数组.
$q.all([d3Q.init(), scope.loadHistoryData()])
.then(function(result) {
scope.renderHistoryGram(target, result[0], result[1]);
});
标签:angular-promise,javascript,angularjs,asynchronous 来源: https://codeday.me/bug/20190830/1768096.html