promise的用法不清楚
来源:3-12 突破获取数据条数的限制
陈双辞
2020-07-22
请问为什么
const list = await playlistCollection.get()
playlistCollection前面就需要await,
但是
for (let i=0; i<batchTimes; i++){
let promise = playlistCollection.skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
上面这段代码里面为什么playlistCollection前面不需要await?
而且虽然promise是get()返回的,但是一个promise的executor不应该立刻就会执行吗?
还是说是异步操作的原因?
可是异步操作的话前面不更应该有await吗?
这里却只是赋值给了变量promise,什么都没发生?
还有下面的
(await Promise.all(tasks)).reduce((acc,cur))=>{
return {
data:acc.data.concat(cur.data)
}
Promise.all(tasks)不是应该返回一个promise对象吗?为什么可以直接接reduce方法呀?
写回答
1回答
-
如果时间允许的情况下,建议看下我讲的这门ES的语法课程(https://coding.imooc.com/class/444.html ),其中有对于异步操作各种方式的详细讲解。
1、这里之所以不写await:
是因为我们这里的promise是要给下面的Promise.all()去使用的,all方法的参数是Promise对象组成的数组,这个数组里的每一个Promise应该是pending状态的Promise对象。如果加了await,那么这里的Promise对象的状态就是resolved或者rejected了。
2、
红色框中的代码是有await的,所以reduce会等到Promise.all()方法执行完成在执行reduce,红色框的返回结果是一个数组,这个数组里面的元素的值对应的是
这句话的查询结果。
012020-07-24
相似问题