2015-10-12 2 views
1

На днях я написал эту функцию в JavaScript как простой DTO для объекта из плагина jQuery. Я предположил, что если бы я написал общую строку return gridColumns в конце функции, возможно, был возвращен массив до мой цикл for был заполнен. Поэтому я написал это заявление while (true) в конце, думая, что я умный.Как понять синхронность JavaScript/асинхронность

function getGridColumns() { 
     var gridColumns = []; 
     var records = $("#jqxGrid").jqxGrid("columns").records; 
     for (var i = 0; i < (records.length); i++) { 
      var obj = { 
       datafield: records[i].datafield, 
       width: records[i].width, 
       cellsalign: records[i].cellsalign, 
       hidden: records[i].hidden 
      } 
      gridColumns.push(obj); 
     } 
     while (true) { 
      if (gridColumns.length == records.length { 
       return gridColumns; 
      } 
     } 
    }; 

Мой приятель посмотрел на мой маленький «взломать» и сказал, что это совершенно не нужно, и я сделал некоторые испытания и определили, что он прав.

Итак, вот где я нахожусь. Как JavaScript асинхронный, и как это не так? Может ли кто-нибудь помочь мне понять эту парадигму, чтобы я мог лучше писать JavaScript?

+3

Это асинхронно, когда вы вызываете вызов функции асинхронному сервису. Ничто в вашем коде выше не соответствует этому описанию. – Pointy

+0

@Pointy, поэтому aync должен быть явно определен, иначе JavaScript будет выполняться синхронно? –

+0

И спасибо за нисходящее, кто бы это ни сделал. Действительно конструктивен для людей, которые хотят учиться, как и я. –

ответ

2

Наиболее распространенные механизмы, которые порождают новую «тему» ​​исполнение и, таким образом, так сказать, ввести асинхронную ситуацию в JavaScript являются обратными вызовами AJAX вызова (если вызов был специально сделан synchrounous) и setInterval() и setTimeout() звонков. Как отметил Уокей, есть нечто большее, чем это.

+2

Существуют и другие службы, которые вводят асинхронные функции в браузерах и многие другие в таких средах, как Node.js. – Pointy

+0

Thanks Pointy, было ощущение, что я действительно не знаю этого достаточно хорошо. Обновлен мой ответ, чтобы сказать «наиболее распространенный», а не «все». –

+0

Конечно, это самые распространенные или, по крайней мере, первые вещи, с которыми сталкиваются новые программисты JavaScript :). Еще одним важным источником вопросов о асинхронном поведении являются API, такие как Google Maps, который, конечно же, скрывает в нем операции AJAX. – Pointy

Смежные вопросы