Redux中的JavaScript异步。。?
功能中的操作(针对从firstore导入的数据的操作) 这里是索引数据Redux中的JavaScript异步。。?,javascript,reactjs,google-cloud-firestore,Javascript,Reactjs,Google Cloud Firestore,功能中的操作(针对从firstore导入的数据的操作) 这里是索引数据 export async function getUserIndex (data){ let db = loadFB().firestore(); console.log(data) let date = moment(data).utc().format() let query = db.collection('users').where("create_date", ">",
export async function getUserIndex (data){
let db = loadFB().firestore();
console.log(data)
let date = moment(data).utc().format()
let query = db.collection('users').where("create_date", ">", date)
console.log(query)
return await query.get().then(docs=>{
let result = docs.size
console.log("result!!", result)
return result
})
}
功能组件
async getuserIndex_component(date){
let number =""
number = await userAction.getUserIndex(date)
console.log("number",number)
return await number
}
const{user_list}=this.props//user_list=[{id:aa,pw:bb},{id:cc,pw:dd}…}数据
让数据=用户列表
设组={}
设数字=0
for(让数据的索引_数据){
让日期=时刻(索引数据。创建日期)。格式(“YYYY-MM-DD”)。切片(0,10)
设index=this.getuserIndex\u组件(日期)/由于getuserIndex\u组件
是异步的,它将返回一个承诺。您需要等待该承诺得到解决,然后才能获得索引
结果
首先,您应该能够将getuserIndex\u组件
简化为
异步getuserIndex\u组件(日期){
let number=await userAction.getUserIndex(日期)
控制台日志(“编号”,编号)
返回号码
}
当您删除console.log
时,它可能只是
异步getuserIndex\u组件(日期){
返回userAction.getUserIndex(日期)
}
正如我在评论中提到的。您可以发送所有异步调用,然后通过Promise.all
等待所有承诺得到解决
类似这样的东西。(我无法测试其中任何一个,但它应该展示出总体思路。)
const{user\u list}=this.props;//user\u list=[{id:aa,pw:bb},{id:cc,pw:dd}数据
让数据=用户列表
设组={}
设数字=0
常数日期=[]
const promises=data.map((索引数据)=>{
常量日期=时刻(索引数据。创建日期)。格式(“YYYY-MM-DD”)。切片(0,10)
dates.push(date)//在所有承诺解决后使用。
返回此.getuserIndex\u组件(日期)//索引承诺。
})
常量索引=等待承诺。全部(承诺)
for(设i=0;i
您的调用getuserIndex\u组件
但是函数是getuserIndex\u组件
,末尾带有一个“s”。我假设这只是您的演示中的一个输入错误?或者有其他函数吗?因为getuserIndex\u组件
是异步的,您只会收到一个承诺。简单的选择是aw但是,ait
调用一次只能运行一个。相反,我建议将所有承诺推入一个数组,并在循环后使用Promise.all()
。这是一个输入错误。我已对其进行了修改。“将所有承诺推入一个数组,并在循环后使用Promise.all()”我不知道你是什么意思。你能用代码扩展更多吗?谢谢,但是从promise前面的Await分类发送了一个错误。const index=Await promise.all(promises)^'await'只能在异步函数中使用,顶级函数不能是异步的。我不能在这里教授所有这些(无论如何,这是离题的),但从这里开始:@이창훈 正如我所说的,这是为了演示一般的想法。您没有提供任何关于这个函数的上下文,或者它是否是异步的。因此不可避免地需要一些修改。
const {user_list} = this.props; //user_list = [{id:aa, pw:bb},{id:cc, pw:dd}...} data
let data = user_list
let groups = {}
let number =0
for (let index_data of data) {
let date = moment(index_data.create_date).format("YYYY-MM-DD").slice(0, 10)
let index = this.getuserIndex_component(date) //<==here log Promise{<pendding>}
console.log(index)
if (groups[date]) {
let group = groups[date];
group.push({ index: index-number, ...index_data });
} else {
number =0;
groups[date] = [{ index: index-number, ...index_data }]
}
number++;
}
const dates = Object.keys(groups)
const user_list_result = []
for (let date of dates) {
user_list_result.push(...(groups[date]))
}
return(...)