Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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 for循环中的promise.resolve()返回未定义_Javascript_Reactjs_Es6 Promise - Fatal编程技术网

Javascript for循环中的promise.resolve()返回未定义

Javascript for循环中的promise.resolve()返回未定义,javascript,reactjs,es6-promise,Javascript,Reactjs,Es6 Promise,我尝试在搜索过程之后获取一个树节点。但它总是返回未定义的。。 这是密码 const findOrder=(列表,键)=> 新承诺((决议)=>{ for(设i=0;i{ const orders=等待查找器( 特雷达, dropObj.classKind==“1”?键根(dropObj.key):dropObj.key ); console.log(`======================同级:`,订单);//未定义 }; setOrder()您没有在此处解析它 /。。。 if(列表[i

我尝试在搜索过程之后获取一个树节点。但它总是返回未定义的。。 这是密码

const findOrder=(列表,键)=>
新承诺((决议)=>{
for(设i=0;i{
const orders=等待查找器(
特雷达,
dropObj.classKind==“1”?键根(dropObj.key):dropObj.key
);
console.log(`======================同级:`,订单);//未定义
};

setOrder()您没有在此处解析它

/。。。
if(列表[i]。子对象){
findOrder(列表[i]。子项,键);
}
// ...
要让外部承诺知道何时解决它,您应该明确地执行以下操作:

/。。。
if(列表[i]。子对象){
findOrder(列表[i]。子项,键)。然后(结果=>{
//因为resolve只能调用一次,
//如果它没有发现任何东西,就不要给它打电话
如果(结果)解决(结果)
});
}
// ...
这应该行得通。然而,这个实现有太多无用的调用需要“解析”。最好直接找到匹配项并解决它

以下是一个例子:

const findOrder=函数(列表,键){
返回新承诺((解决、拒绝)=>{
解析(查找(列表、键))
函数查找(_列表,键){
for(设i=0;i<\u list.length;i++){
if(_-list[i].key==key)返回_-list[i].children
if(_list[i].children){
const c=find(_list[i]。子项,键)
如果(c)返回c
}
}
返回未定义
}
})
}

Ah,但我在检查
if(list[I].children){findOrder(list[I].children,key);}
时,有一半是对的(我们这么说吧,而不是“大错特错”…)
它不会返回任何内容,也不会解决家长的承诺。这是否回答了你的问题?你为什么要使用承诺呢?您的
findOrder
代码中没有异步内容。@bucky2没有,唯一的问题是缺少
return
关键字。你不应该在这里使用承诺。@Bergi是正确的-承诺只是让你困惑,而不是实际帮助。好吧,它们没有帮助-你同步完成所有事情,所以承诺抽象是毫无价值的。最后,不要返回递归调用的结果,这不是“等待不够”的问题,也不是在此调用链中无法确定的其他时间点的解决方案。我需要尝试更好的选择。非常有用。谢谢