将 promise 放在前端好还是后端好?
Is it better to place promises on the front end or back end?
我目前正在重构我的代码,因为存在一些加载时间问题,导致我的数据无法在生产环境中正确加载。
为了养成更好的习惯,您是否建议将 promises 放在后端,也就是调用数据库的地方,还是放在调用上述数据库方法并返回结果的前端?是否会同时使用两者?
一如既往,在技术领域,一切都是权衡利弊,一个并不比另一个好,但是因为我大部分时间都在工作 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))
);
});
}
简而言之,我的票投给了前端哈哈:)
我目前正在重构我的代码,因为存在一些加载时间问题,导致我的数据无法在生产环境中正确加载。
为了养成更好的习惯,您是否建议将 promises 放在后端,也就是调用数据库的地方,还是放在调用上述数据库方法并返回结果的前端?是否会同时使用两者?
一如既往,在技术领域,一切都是权衡利弊,一个并不比另一个好,但是因为我大部分时间都在工作 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))
);
});
}
简而言之,我的票投给了前端哈哈:)