javascript - 将承诺放在前端还是后端更好?
问题描述
我目前正在重构我的代码,因为有一些加载时间问题阻止我的数据在生产中正确加载。
只是为了建立一个更好的习惯,您是否建议将承诺放在后端,即我的数据库调用所在的位置,或者在调用所述数据库方法并返回结果的前端?是否会同时使用两者?
解决方案
与往常一样,在技术领域,它都是关于权衡的,一个并不比另一个更好,但是因为我大部分时间都在 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))
);
});
}
简而言之,我的投票投给了前端哈哈 :)
推荐阅读
- python-3.x - tesseract ocr 不适用于文本长度仅为 2 或更少的图像。适用于文本长度大于 3 的图像
- php - 获得祖父母,曾祖父母等的口才关系
- android - 将 React-Native 的 Android 项目导入 Android Studio
- android - 在不破坏布局约束的情况下实现动画
- python - TensorFlow:Softmax 应用于每个条目
- c# - XML上的Linq从select中的嵌套元素中获取值
- java - 如何将变量传递给按钮 clickListener 事件中的方法?
- java - 如何在 Jenkins 控制台输出中显示测试用例详细信息?
- eclipse - 无法在测试插件/包(JUnit5)上“作为 JUnit 插件测试运行”
- vba - 使用 VBA 从 html 文档计算和复制到 excel 表:运行时错误 13 类型不匹配