在 Angular 的 Q 实现中,我们怎样才能使这种调用看起来更好?这样的话,d3加载和数据加载没有关系,肯定是并行的。
d3Q.init()
.then(function(d3) {
scope.loadHistoryData()
.then(function(data) {
scope.renderHistoryGram(target, data, d3);
});
});
这种臭代码也很难测试,因为有多个 promise 需要 mock。代码测试有什么最佳实践吗?
最佳答案
由于第二个 promise 似乎并不依赖于第一个 promise ,因此您可以并行运行它们并在两者都使用完 $q.all() 后调用一个函数。 .
$q.all({d3: d3Q.init(), data: scope.loadHistoryData()})
.then(function(result) {
scope.renderHistoryGram(target, result.d3, result.data);
});
在上面的例子中,我们创建了一个对象,这样我们就可以使用键来引用每个 promise 的结果。您还可以传递一系列 promise 。在数组的情况下(如下),结果将是一个结果数组,其顺序与 promise 相同。
$q.all([d3Q.init(), scope.loadHistoryData()])
.then(function(result) {
scope.renderHistoryGram(target, result[0], result[1]);
});
关于javascript - Angular $q 然后 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245697/