编程语言
首页 > 编程语言> > javascript – Angular $q然后地狱

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