给予
let arr = [1,2,3];
function filter(num) {
return new Promise((res, rej) => {
setTimeout(() => {
if( num === 3 ) {
res(num);
} else {
rej();
}
}, 1);
});
}
function filterNums() {
return Promise.all(arr.filter(filter));
}
filterNums().then(results => {
let l = results.length;
// length should be 1, but is 3
});
长度是3,因为返回的是誓言,而不是值。有没有一种方法来过滤数组与一个函数返回一个承诺?
注意: 对于本例,fs.stat 已被 setTimeout 替换,具体代码请参见 https://github.com/silenceisgolden/learn-esnext/blob/array-filter-async-function/tutorials/array-filter-with-async-function.js。