gpt4 book ai didi

javascript - FirebaseListObservable + promise = ? ( Angular 火2)

转载 作者:行者123 更新时间:2023-11-30 08:28:28 26 4
gpt4 key购买 nike

作为我之前问题的后续问题(在这个问题上我无法遍历一个似乎已满的数组),我现在知道问题出在哪里了,应该是列表不是'当我开始使用它时它已经满了。

然后我尝试使用 promise 等待任务异步执行然后继续。

问题是,对我来说,promise 语法确实令人不快,对于像我这样基本上从未在这个项目之外使用过 javascript 的人来说,它似乎太复杂了。

我有这个 promise :

var promise=new Promise(function(resolve,reject){

that.af.database.list('/users/'+that.authentificationService.getUserId()+'/favs'/*, { preserveSnapshot: true}*/)
.subscribe(snapshots=>{
snapshots.forEach(snapshot => {
//console.log(snapshot.label);
that.prefList.push(snapshot.label);
//this.prefList.push(snapshot.label);
});
});

console.log("promise = done");
return that.prefList;
});

(那个 == 这个,顺便说一下)

我得到“完成”打印,但我不知道这是否相关

然后我尝试在 promise 的 then 函数中做一些事情:

promise.then(function(result){ (...) }

我里面有多个 console.logs,但实际上没有一个被执行。我做错了什么?

promise.catch(function(e){
console.log("catch entered");
console.log(e);
});

catch 也不会向控制台记录任何内容。

最佳答案

您不必创建自己的 promise ;您可以使用 RxJS toPromise 运算符(您可以使用 map 运算符将收藏夹数组映射到标签数组):

import 'rxjs/add/operator/first';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';

...

return that.af.database
.list('/users/' + that.authentificationService.getUserId() + '/favs')
.map(favs => favs.map(fav => fav.label))
.first()
.toPromise();

您还需要使用 first 运算符,因为 observable 需要在 promise 解析之前完成。 AngularFire2 列表将随着数据库的变化继续发出值,但你只需要第一个值。 (如果您想要更改值,则 promise 是不合适的。)

关于javascript - FirebaseListObservable + promise = ? ( Angular 火2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com