Для печати по одному, если вы подразумеваете каждую секунду (согласно комментарию в ответе)
const obj = []
const delay = (timer, num) => new Promise(resolve => setTimeout(resolve, timer, num));
let p = Promise.resolve();
_.times(10).map(o => {
p = p
.then(() => delay(1000, o))
.then(num => console.log((obj.push(num+1), obj+'')));
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
Примечание ... push(num+1)
, если хотите 1
, 1,2
и т. Д., В противном случае это 0
, 0,1
и т. Д.
Примечание 2: console.log(x.push(y))
записывает новую длину x , а не массив x - поэтому я положил console.log((obj.push(num+1), obj+''))
note ()
внутри, с оператором ,
, чтобывывод obj+''
на самом деле, чтобы быть понятным, вы должны написать это
const obj = []
const delay = (timer, num) => new Promise(resolve => setTimeout(resolve, timer, num));
let p = Promise.resolve();
_.times(10).map(o => {
p = p
.then(() => delay(1000, o))
.then(num => {
obj.push(num+1);
console.log(obj.join(','))
});
})
другая вещь, на которую следует обратить внимание, это то, что .map
является неправильным для использования здесь, так как.map
используется для сопоставления массива с новым массивом значений - поскольку вы имеете дело с асинхронным кодом, результирующий массив будет, в лучшем случае, массивом неопределенного или массивом обещаний - но поскольку вы не назначаетерезультат .map
ни к чему, тогда этот момент довольно спорный