wat*_*ery 6 javascript promise
我遇到过这段代码:
const results = await Promise.all(
[ Model1.find({}), Model2.find({}) ],
Model3.find({})
),
v1 = results[0],
v2 = results[1],
v3 = results[2]
Run Code Online (Sandbox Code Playgroud)
all()用数组和单个对象调用- 模型*是Mongoose模型.
这是一个容易修复的错误,但我想了解它是如何给出结果值,它们是:
Model1Model2undefined正如在逗号运算符的这个答案中所解释的那样,我只期望Model3.find({})实际返回数据results,因为逗号运算符应该计算第一个操作数但返回其第二个操作数(to Promise.all()).但它的,而不是周围的其他方法:results[0]与results[1]都包含数据,而results[2](因此v3)是undefined.
我错过了什么?
这是一个参数列表而不是单个表达式,因此逗号运算符不适用 - 数组
[Model1.find({}), Model2.find({})]
Run Code Online (Sandbox Code Playgroud)
被评估为传递给 的第一个参数Promise.all,第二个参数是
Model3.find({})
Run Code Online (Sandbox Code Playgroud)
但Promise.all只接受一个参数,一个可迭代的;的第二个参数Model3被忽略,结果被[Model1.find({}), Model2.find({})]映射到它们的解析值。由于传递的数组只有两个值,因此Promise.all解析为也只有两个值的数组(索引[2]为undefined)。
如果您将调用括Promise.all在另一组括号中:
const results = await Promise.all((
[ Model1.find({}), Model2.find({}) ],
Model3.find({})
))
Run Code Online (Sandbox Code Playgroud)
那么您将调用逗号运算符,因为第二组括号内的所有内容都将被计算为单个表达式,而解释器尝试为要传递给Promise.all. (但Promise.all接受iterable,而不是 a Promise,因此逗号运算符的计算:
await Promise.all((
Model3.find({})
))
Run Code Online (Sandbox Code Playgroud)
然后会导致错误:
TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |