【问题标题】:Is it better to place promises on the front end or back end? [closed]将承诺放在前端还是后端更好? [关闭]
【发布时间】:2020-04-27 14:18:31
【问题描述】:

我目前正在重构我的代码,因为存在一些加载时间问题,导致我的数据无法在生产环境中正确加载。

只是为了建立一个更好的习惯,您是否建议将承诺放在后端,即我的数据库调用所在的位置,或者放在调用上述数据库方法并返回结果的前端?是否会同时使用两者?

【问题讨论】:

  • 前端调用db方法是指前端调用API端点触发后端db方法调用吗?
  • 因为您很可能发生了 2 个异步调用……一个在前端调用 API,另一个在后端查询数据库。在这种情况下,您可以在两个地方都使用 Promise。
  • 是的,我会在别处寻找延迟问题。编辑我之前所说的,Promises 是一个比回调更好的异步代码接口。 async/await 是 promise 的实际语法糖。
  • @a_byte_of_pizza 承诺简化您的代码确实使其客观上变得更好 :-) 它可以帮助您找到错误发生的错误顺序,或不必要的顺序.
  • 前端承诺与后端承诺将是一个相当奇怪的设计选择。在服务器端和客户端都使用 Promise 是非常现实的(在 node.js 应用程序中)。

标签: javascript promise bluebird


【解决方案1】:

一如既往,在技术领域,一切都是关于权衡的,一个并不比另一个好,但是因为我大部分时间都在 Angular 上工作,所以我会告诉你我会怎么做:

我会编写一个从 RXJS 订阅中获取单个值的服务,然后使用 promise 将其解包,这是一个 firebase 示例:

  getValue(path: string): Promise<any> {
    var pathArr = path.split('/')
    var col = pathArr[0]
    var doc = pathArr[1]
    if (doc) {
      return new Promise((resolve) => {
        this.afs
          .collection(col)
          .doc(doc)
          .valueChanges()
          .pipe(take(1))
          .subscribe((val) => {
            resolve(val);
          });
      });
    } else {
      return new Promise((resolve) => {
        this.afs
          .collection(col)
          .valueChanges()
          .pipe(take(1))
          .subscribe((val) => {
            resolve(val);
          });
      });
    }
  }
}

然后我将通过使用 .then() 函数获得承诺的价值,相同的 firebase 示例:

this.Database.getValue('Developers').then((val) => {
      var output = [];
      val.forEach((dev: any) => {
        //@ts-ignore
        output.push(dev.name);
      });
      output = output.filter((_val) => {
        return _val !== undefined;
      });
      this.options = output;
      this.filteredOptions = this.developerForm
        .get('applyTo')
        .valueChanges.pipe(
          startWith(''),
          map((value) => this._filter(value))
        );
    });
  }

简而言之,我的投票投给了前端哈哈 :)

【讨论】:

  • 酷。感谢您的详细解释。我也使用 angular 并且过去使用过 firebase,所以这使得它更容易消化。非常感谢!
猜你喜欢
  • 2018-02-16
  • 2012-02-23
  • 2020-03-13
  • 2011-03-13
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多