首页 > 解决方案 > 中间值 - 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 行代码中。

标签: javascripttypescript

解决方案


.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));

推荐阅读