2016-11-28 2 views
0

Я хочу понять, как написать свои собственные функции асинхронного ввода.javascript async заполнить массив

Так как я могу заполнить массив с большим количеством элементов асинхронной и увидеть «закончить» линию без задержки, вместо того, чтобы ждать население, чтобы закончить?

Вот пример того, как я пытался реализовать обещания и обратные вызовы, но не удалось.

let arr = []; 

populateAsync(arr); 
console.log('finish'); 

function populateAsync(arr) { 
    // somehow populate arr async till it reaches 
    // 100000000 elements (big enough to make a delay) 
} 
+1

Что такое-то логика для заполнения массива, а что библиотека обещание вы с помощью? – Aruna

+0

Я пробовал использовать собственный объект Promise. Я пробовал с некоторым кодом и не работал. – gneric

+0

Вы не можете писать собственные асинхронные функции. Вы должны использовать уже-асинхронную функцию, такую ​​как 'setTimeout' – Bergi

ответ

2

Вы можете использовать объект Promise или просто использовать setTimeout()

let arr = []; 
populateAsync(arr); 
console.log('finish'); 

function populateAsync(arr) { 
    setTimeout(function(){ 
     //do something 
    },0) 
} 

с Promise

let arr = []; 
populateAsync(arr).then(function(){//do something with arr 
}); 
console.log('finish'); 

function populateAsync(arr) { 
    return new Promise(function(resolve, reject){ 
     //do something 
     resolve(arr); //resolve with value 
    }); 
} 
+0

Кажется, что это работает как я хочу, спасибо! Можете ли вы объяснить, как именно поток идет с setTimeout равным 0? – gneric

+1

setTimeout будет иметь собственный стек вызовов и запускается сразу после очистки текущего стека. Просто помните, что JS в браузере однопоточный, поэтому он все еще блокирует – nottu

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