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回答

谢成

2020-07-23

如果时间允许的情况下,建议看下我讲的这门ES的语法课程(https://coding.imooc.com/class/444.html  ),其中有对于异步操作各种方式的详细讲解。


1、这里之所以不写await:

//img.mukewang.com/szimg/5f19b26e0953b3c009380101.jpg

是因为我们这里的promise是要给下面的Promise.all()去使用的,all方法的参数是Promise对象组成的数组,这个数组里的每一个Promise应该是pending状态的Promise对象。如果加了await,那么这里的Promise对象的状态就是resolved或者rejected了。

2、

//img1.sycdn.imooc.com/szimg/5f19b31b0969fefa09850215.jpg

红色框中的代码是有await的,所以reduce会等到Promise.all()方法执行完成在执行reduce,红色框的返回结果是一个数组,这个数组里面的元素的值对应的是

//img.mukewang.com/szimg/5f19b39c095b7d9d09030031.jpg

这句话的查询结果。





0
1
陈双辞
好的,谢谢,明白了:)
2020-07-24
共1条回复

微信小程序云开发-从0打造云音乐全栈小程序

横跨小程序端、云后端、CMS一站式云开发的小程序全栈课程

1938 学习 · 2768 问题

查看课程