我在尝试在我的 Angular 2/4 项目中按顺序运行函数时遇到问题。
我有retrieveData()从数据服务中检索数据并将它们分配到我声明的数组中的函数。
然后我有displayData()使用存储在数组中的数据并将它们显示在图表中的函数。
当我尝试运行它们时,例如:
function(){
this.retrieveData();
this.displayData();
}
Run Code Online (Sandbox Code Playgroud)
displayData()函数先运行retrieveData()主要是因为函数中的数据服务retrieveData()。因此无法正确显示图形。
我发现可以按顺序运行函数的方法之一是async.waterfall从async库中,但我无法将库导入到我的项目中,控制台日志显示:
Uncaught Error: Unexpected value 'waterfall' imported by the module 'AppModule'. Please add a @NgModule annotation.
我不想使用 Promises 和 Observables,因为它们要求初始函数具有某种返回值以传递给下一个函数。我在某种程度上设法使用setTimeOut()函数来实现它,但我真的怀疑该方法的可靠性和稳健性。
那么,async在 Angular 2/4 中使用 有什么帮助,或者有什么方法可以让函数在没有任何返回承诺的情况下等待?
更新
很抱歉给大家带来的困惑和不便。我正在发布并要求一个过度简化的版本。这是我的代码中更完整的部分。我是一个 Angular 和 Typescript 菜鸟,在 Async 编程技术方面更是菜鸟。
下面是我在retrieveAllData()方法中实现的承诺。它在编译时或运行时都不会出现任何错误。但是当函数仍然异步运行时,即refreshAllCharts()仍然在retrieveAllData(). 我对承诺的实现有什么缺陷吗?
import { Component, OnInit, AfterContentInit } from '@angular/core';
import { …Run Code Online (Sandbox Code Playgroud)