javascript - 中间值 - then 不是函数
问题描述
我有这段代码:
const promises = new Array(20).fill(null).map(v => {
return c.lockp('foo').then((v => {
const rand = Math.random()*3000;
return new Promise((resolve) => setTimeout(resolve,rand)).then(_ => v);
})
.then(({key, id}) => c.unlockp(key, id)));
});
return Promise.all(promises)
.then(values => {
console.log('all good');
process.exit(0);
});
我收到此错误:
TypeError: (intermediate value)(intermediate value).then 不是 Array.fill.map.v 的函数 (/home/oleg/WebstormProjects/oresoftware/live-mutex/.r2g/tests/smoke-test.js:26 :6) 在 /home/oleg/WebstormProjects/oresoftware/live-mutex/.r2g/tests/smoke-test.js:20:43 的 Array.map ()
它应该出现在上面代码片段的第 5 行代码中。
解决方案
您.then
正在使用v
参数调用函数(在 之前的括号中.then
)。将其放在.then
外部,以便在 Promise 链上而不是在回调上调用它:
const promises = new Array(20).fill(null).map(v => {
return c.lockp('foo')
.then(v => {
const rand = Math.random()*3000;
return new Promise((resolve) => setTimeout(resolve,rand)).then(_ => v);
})
.then(({key, id}) => c.unlockp(key, id));
推荐阅读
- sql - 如何在sql中使用嵌套查询来做矩阵幂?
- class - 无法在初始化程序中访问实例成员“PageNumber”。尝试用不同的表达式替换对实例成员的引用
- java - 如何将输入流复制到java中的文件夹?
- automation - 无法与 nessus 服务器建立连接
- github - github中不熟悉的图标
- node.js - Sequelize.js - 选择正确的关系
- vagrant - 麦克 | 宅基地:警告:远程连接断开。重试
- swiftui - 在 swift-ui/xcode12 中添加 baritem 时会调整列表
- node.js - 为什么 Resource 被解释为 Document 但通过 res.download 与 MIME 一起传输?
- reactjs - react 和 expressjs 中的 Cookie 处理