Javascript Object.keys(myObject.forEach()是否会同步执行?

Javascript Object.keys(myObject.forEach()是否会同步执行?,javascript,object,Javascript,Object,似乎找不到这样一个对象上的循环是否为非阻塞的答案 let workComplete = false; let itemFound = false; Object.keys(myObject).forEach((key, index) => { // check thousands of keys for a match if(key === someOtherValue) { itemFound = true;

似乎找不到这样一个对象上的循环是否为非阻塞的答案

    let workComplete = false;

    let itemFound = false;

    Object.keys(myObject).forEach((key, index) => {
      // check thousands of keys for a match
      if(key === someOtherValue) {
        itemFound = true;
      }
      if(index === Object.keys(myObject).length - 1) {
        workComplete = true;
      }
    });

    // Is it true that subsequent work here
    // will not execute until the forEach completes?
    console.log(workComplete);

上面的代码是否保证调用
console.log()
时总是将
workComplete
的值打印为
true

您提供的代码都是同步执行的。它将使用第一个键同步运行函数,然后对第二个键执行相同的操作,依此类推,直到所有键都用完。只有到那时它才会注销
workComplete

您提供的代码将同步执行,部分原因是没有异步工作。如果在
forEach()
中调用异步函数,则不会阻塞:

异步函数isThing(键){
返回等待检查(键);
} 
异步函数findThing(){
//forEach不会等待isThing,所以
//所有电话都将在对方之后立即发送
Object.key(Things.forEach(isThing);
//此语法允许您执行每个等待操作
for(对象的var key.key(things){
等待isThing(键)
}
}
您可以利用这种承诺行为来做一些事情,比如并行化一组get,并在它们全部完成后进行解析:

异步函数获取(名称){ 返回等待获取(`${url}/${name}`) } 异步函数getAllThings(){ const thingPromises=Object.keys(Things.map)(getThing); const things=等待承诺; 归还物品; }
将取决于
做一些工作
部分中发生的事情。你能详细说明为什么它很重要吗?不管怎样,我会在问题中添加
工作
。当你说“这取决于”时,我想你的意思是这取决于是否在循环内部执行了对其他函数的调用?在我的情况下,不会有。@DevMike他们想要的o检查您是否正在执行异步操作。例如,执行
设置超时
或执行创建承诺的操作。forEach本身是同步的,但如果您在自定义代码中执行异步操作,则这取决于您。换句话说,根据对象的长度检查
索引
,以确定循环是否完成是否冗余且不必要?假设在此循环过程中没有从myObject添加或删除内容(这将更改关键帧的长度),是的,这是多余的。如果您不介意进一步详细说明,那么在forEach循环的执行过程中,如果在
myObject
中添加或删除元素会发生什么情况?这将取决于代码是什么。在您提供的示例中,您将提前将workComplete设置为true(如果相对于正在循环的数组,键的数量减少了),或者根本没有(如果键的数量增加了)。