为什么 await 有效而 .then 在 truffle exec 中不起作用?

Why does await work and .then does not work in truffle exec?

在我的代码中,await 有效,但 .then 在 truffle exec 中无效。 我运行下面的代码在Truffle exec。 此代码已被简化以突出问题。
test1.js

module.exports = async function(callback) {

  const fn = async function(i) {
    return i;
  };

  const promises = [];
  for (let i = 0; i < 5; i++) {
    promises.push(fn(i));
  }

  const res = await Promise.all(promises);
  console.log(res);

  callback();
};

并且,我 运行 test1.js 在 truffle exec.

$ truffle exec test1.js
Using network 'development'.

[ 0, 1, 2, 3, 4 ]

这个结果是我所期望的。但是,如果我使用 .then 而不是 await
test2.js

module.exports = async function(callback) {

  const fn = async function(i) {
    return i;
  };

  const promises = [];
  for (let i = 0; i < 5; i++) {
    promises.push(fn(i));
  }

  // I changed only this. 
  Promise.all(promises).then(v => console.log(v))

  callback();
};

此结果为空!

$ truffle exec test2.js
Using network 'development'.


一开始我以为这个问题是基于module.exports,所以我测试了这段代码

const test_1 = require('./test1');
const test_2 = require('./test2');
test_1()
test_2()

结果

$ node test.js 
[ 0, 1, 2, 3, 4 ]
[ 0, 1, 2, 3, 4 ]

从这个结果来看,我认为这个问题不是基于module.exports而是基于truffle exec。

这是我的环境。

$ truffle version
Truffle v5.1.27 (core: 5.1.27)
Solidity v0.5.16 (solc-js)
Node v14.15.3
Web3.js v1.2.1

为什么 await 在 truffle exec 中有效而 .then 无效?

请原谅我糟糕的英语。 感谢阅读!

您应该在承诺解决方案中调用“回调”。否则,“回调”会在您的承诺得到解决之前执行。

Promise.all(promises).then(v => {
    console.log(v);
    callback();
});