Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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异步填充数组_Javascript_Asynchronous - Fatal编程技术网

javascript异步填充数组

javascript异步填充数组,javascript,asynchronous,Javascript,Asynchronous,我想了解如何编写自己的异步函数 那么,我如何用大量元素异步填充数组,并毫不延迟地查看'finish'行,而不是等待填充完成 下面是一个例子,我试图实现承诺和回调,但没有成功 let arr = []; populateAsync(arr); console.log('finish'); function populateAsync(arr) { // somehow populate arr async till it reaches // 100000000 element

我想了解如何编写自己的异步函数

那么,我如何用大量元素异步填充数组,并毫不延迟地查看'finish'行,而不是等待填充完成

下面是一个例子,我试图实现承诺和回调,但没有成功

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)
} 

您可以使用Promise对象,也可以只使用
setTimeout()

允诺

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
    });
} 

填充数组的逻辑是什么?您正在使用的promise库是什么?我尝试使用本机promise对象。我尝试了一些代码,但没有成功。您无法编写自己的异步函数。您必须使用一个已经异步的函数,例如
setTimeout
Yes,但我知道如果使用setTimeout,我将在X秒后执行相同的函数,并且仍然会阻止代码。异步填充数组并同时继续执行其余代码是不可能的吗?您可以发布您使用本机异步的逻辑吗?这似乎完全符合我的要求,谢谢!你能解释一下setTimeout等于0时流是如何运行的吗?setTimeout将有自己的调用堆栈,并在清除当前堆栈后立即运行。请记住,浏览器中的JS是单线程的,所以它仍然处于阻塞状态
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
    });
}