Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在forEach中与Firebase/Firestore异步/等待_Javascript_Firebase_Asynchronous_Google Cloud Firestore - Fatal编程技术网

Javascript 在forEach中与Firebase/Firestore异步/等待

Javascript 在forEach中与Firebase/Firestore异步/等待,javascript,firebase,asynchronous,google-cloud-firestore,Javascript,Firebase,Asynchronous,Google Cloud Firestore,我试图使用getL函数动态设置HTTP响应的属性,但它给了我一个承诺,我无法在forEach上设置async,因为这会破坏它(请参阅generateLinkForList函数)。还有别的办法吗 /** *@module域/helper */ 常数{ 补足 组成 isNil, 皮克比 }=需要('ramda'); 常量notNull=合成(补码(isNil)); /** *@function cleanData *@returns{undefined} */ const cleanData=(实体

我试图使用
getL
函数动态设置HTTP响应的属性,但它给了我一个承诺,我无法在
forEach
上设置
async
,因为这会破坏它(请参阅
generateLinkForList
函数)。还有别的办法吗

/**
*@module域/helper
*/
常数{
补足
组成
isNil,
皮克比
}=需要('ramda');
常量notNull=合成(补码(isNil));
/**
*@function cleanData
*@returns{undefined}
*/
const cleanData=(实体)=>pickBy(notNull,实体);
/**
*@name生成
*@returns{undefined}
*/
常量生成关系=()=>([]);
异步函数getL(repo,entityContext){
设d=等待回购的下一步(entityContext);
控制台日志(d)
返回d;
}
/**
*@name generateLinkForList
*@returns{undefined}
*/
const generateLinkForList=(entityContext、类型、entityName、repo)=>{
const relations=require(`./${entityName}/relations.js`)
常量名称空间=类型+“关系”;
const_relations=关系[名称空间];
让主持人回答http://localhost:4000';
让关系列表=[];
_relations.forEach((linkrelations)=>{
Object.keys(linkRelation).forEach((key)=>{
if(linkRelation.hasOwnProperty('next')){
设关系={};
设l=getL(回购,entityContext);
log('----getL');
控制台日志(l);
if(l.长度){
relation.next=linkRelation.next
.replace({nextId}',l[0].id)
}
relation.next=linkRelation.next
.replace({fullhost}',host)
.replace(“{id}”,entityContext.id);
关系列表。推送(关系);
}
if(linkRelation.hasOwnProperty('self')){
设关系={};
relation.self=linkRelation['self']
.replace({fullhost}',host)
.replace(“{id}”,entityContext.id);
关系列表。推送(关系);
}
})
});
返回关系列表;
};
/**
*@function generateLinkForItem
*@静态
*@returns{array}
*/
const generateLinksForItem=(entityContext、类型、entityName)=>{
const relations=require(`./${entityName}/relations.js`)
常量名称空间=类型+“关系”;
const_relations=关系[名称空间];
让主持人回答http://localhost:4000';
let token,eventToken;
让_list=[];
_关系。forEach((relRef)=>{
Object.keys(relRef).forEach((keyRef)=>{
if(relRef[keyRef].includes({id}')){
relRef[keyRef]=relRef[keyRef].replace(/{id}/,entityContext.id);
}
if(relRef[keyRef].includes({fullhost}')){
relRef[keyRef]=relRef[keyRef]。替换(/{fullhost}/,host);
}
if(relRef[keyRef].includes({token}')){
relRef[keyRef]=relRef[keyRef]。替换(/{token}/,token);
}
if(relRef[keyRef].includes({eventToken}')){
relRef[keyRef]=relRef[keyRef]。替换(/{eventToken}/,eventToken);
}
_list.push({
rel:keyRef,
href:relRef[keyRef]
});
});
});
返回列表;
};
/**
*@function generateClassList
*@静态
*@returns{array}
*/
const generateClassList=(上下文)=>(['organization']);
/**
*@函数生成属性
*@param{object}repo Repostory用于在资源下生成实体。
*@returns{array}
*/
const generateEntities=(回购)=>{
return repo.getAll()
。然后((文档快照)=>{
返回documentSnapshots.map((doc)=>{
如果(文件存在){
设data=doc.data()
返回{
//类别:generateClassList(data.id),
//rel:generateRelations(data.id),
属性:数据
//链接:generateLinksForItem(data.id,'item','user')
};
}
});
});
};
/**
*@函数生成
*@静态
*@returns{array}
*@说明
*好的,这里我们基本上是用CasperJS编写脚本。假设是
*将有一个通用的客户端,通过它我们可以自动化浏览器
*行为和平台能力(Cordova)。我们可以想到超媒体
*控制作为修辞关系在领域知识上的投影
*表示超媒体中的多个连接或链接的图形
*集合(数字和其他类型身份的区别)。
*/
const generateActions=(_itemForms,entity,entityName)=>{
让主机=`http://localhost:4000/api/${entityName}`;
_forEach(函数(itemRef,key){
Object.keys(itemRef).forEach(函数(keyRef){
if(itemRef[keyRef].includes({id}')){
itemRef[keyRef]=itemRef[keyRef].replace(/{id}/,entity.id);
}
if(itemRef[keyRef].includes({fullhost}')){
itemRef[keyRef]=itemRef[keyRef]。替换(/{fullhost}/,host);
}
if(itemRef.hasOwnProperty('properties')){
itemRef.properties.forEach((p)=>{
Object.keys(p.forEach)(k)=>{
if(p[k].includes({status}')){
p[k]=p[k].替换(/{status}/,'pending');
}
});
});
}
});
});
返回项目表单;
};
module.exports={
清洁数据,
GenerateLinkForItem,
GenerateLinkForList,
生成分类列表,
代际关系,
代际
};
//EOF
这就是我使用
generateLinksForList
函数的地方,因此我不能对包含
映射使用
async

/**
*@module app/place/get
*@说明
*去所有地方。
*/
const{itemForms}=require('../../domain/place/transitions');
const{Place}=require('../../domain/Place');
常数{
代际关系,
GenerateLinkForList,
}=require('../../domain/helper.js');
module.exports=({placeRepository})=>{
常量all=()=>{
回报承诺
.resolve()
。然后(()=>placeRepository.getAll()
。然后((文档快照)=>{
返回文档快照
for ( const linkRelation of relations ) {
    for ( const key in linkRelation) {
        ...
        const l = await getL(repo, entityContext);
        ...
    }
}