Javascript 提供程序和调用页之间的异步操作体系结构

Javascript 提供程序和调用页之间的异步操作体系结构,javascript,typescript,asynchronous,ionic-framework,promise,Javascript,Typescript,Asynchronous,Ionic Framework,Promise,我对使用提供者获取并随后转发异步数据的最佳方法感到困惑。。。不幸的是,我不知道什么是我不知道的,所以我的问题充其量只是模糊不清 为数据库或其他异步操作创建一个体系结构的最佳方法是什么?该体系结构使所有数据库/http/etc调用保持在一起,但允许在调用页本身上进行异步操作?例如,我想调用this.provider.getDataFromDatabase,然后在同一页中使用数据 我想我可以把这个问题归结为,你把它们放在哪里 以下是我玩过的一些东西的一些例子: 一,。Promise封装在Promis

我对使用提供者获取并随后转发异步数据的最佳方法感到困惑。。。不幸的是,我不知道什么是我不知道的,所以我的问题充其量只是模糊不清

为数据库或其他异步操作创建一个体系结构的最佳方法是什么?该体系结构使所有数据库/http/etc调用保持在一起,但允许在调用页本身上进行异步操作?例如,我想调用this.provider.getDataFromDatabase,然后在同一页中使用数据

我想我可以把这个问题归结为,你把它们放在哪里

以下是我玩过的一些东西的一些例子:

一,。Promise封装在Promise方法中-在Promise中我编写了promises封装在promises中,其中内部Promise是数据库/http/etc调用,外部Promise是调用页将用于协调异步函数的函数

.then locations-1。那么异步调用的位置在提供程序中。另一个.then位于处理包装器的调用页中 Pro-我能够将所有异步操作完全保留在提供程序中,并且仍然能够在调用页面中协调操作。 Con-它似乎不必要地复杂,我一直认为我遇到了一个承诺反模式

2.返回一个promise方法-在provider中,代码只是用来设置数据库/http/etc promise,它只是返回到它使用的调用页面,然后协调操作

。然后是位置-呼叫页面本身中只有一个位置。 Pro-提供程序中更简单的代码。 Con-数据提供者的想法似乎被破坏了,因为实际函数在调用页中。这似乎模糊了提供者和调用页面之间的界限。 代码示例

3.EventEmitters方法-执行异步操作的所有代码都在提供程序中编写。.then位于提供程序中,并通过事件将结果传递回页面。然后,subscribe事件协调页面本身中的操作

。然后是位置-提供程序中只有一个位置 Pro-提供程序中更简单的代码。调用页面中更简单的代码。提供程序中的所有异步操作,以及页面中特定于页面的自定义代码。 Con-由于调用函数和订阅函数不在一起,因此代码在页面中更难理解。此外,我总觉得如果将数据发送到未加载的页面,会给自己带来麻烦。 代码示例


我很好奇最佳实践是什么。我倾向于使用发射器方法,但我不知道是否存在一些我尚未遇到的隐藏问题。提前感谢您为我指明了正确的方向。

供应商或服务或任何其他课程, 必须在getter中返回值、承诺或可观察到的值

希望代码示例会有所帮助

class Product{}

class ProductsService{
  getProduct(){
    return new Product();
    //or return Observable<Product>
    //or return Promise<Product>;
  }
}

class ProductPresenter{

  private product: Product;

  constructor(private _productService:ProductsService){
    //so here must be sync or async way of getting a product to show
    this.product = _productService.getProduct();
    //or _productService.getProduct().then(() => {});
    //or _productService.getProduct().subscribe(() => {});
  }
}

好啊所以,对于数据提供者来说,似乎应该在Promise方法中使用1 Promise。也就是说,在提供者中,您将创建一个由调用页面处理的承诺。该承诺的内在内容是异步数据库承诺有时在页面初始化之前,您可能需要一次解析多个承诺或其他异步数据。所以在你的例子中,页面可以有一些缺席,比如angular2解析器。在1和2中,你做的几乎相同。因为在代码的某个地方它将是getProduct.then=>{};所以1与sql.then=>return Promise.resolvedata相同,因为sql调用已经返回Promiseyes。我同意。1、2和3在做同样的事情。唯一的区别是信息在提供者和调用页面之间的传递方式。这就是我困惑的本质。。。哪种方式最好?或者我还缺少其他人吗?你必须收集数据,而不是承诺中的数据。在Promise.allgetProducts、getComments、getUsers.then=>{}页面的某个地方;
public getPeople() {
            return this.storage.executeSql("SELECT * FROM people", []) 
            }
public getPeople() {
        this.storage.executeSql("SELECT * FROM people", []).then((data) => 
            { 
              this.events.publish('getPeople', data);        
            } 
        }
class Product{}

class ProductsService{
  getProduct(){
    return new Product();
    //or return Observable<Product>
    //or return Promise<Product>;
  }
}

class ProductPresenter{

  private product: Product;

  constructor(private _productService:ProductsService){
    //so here must be sync or async way of getting a product to show
    this.product = _productService.getProduct();
    //or _productService.getProduct().then(() => {});
    //or _productService.getProduct().subscribe(() => {});
  }
}