为什么 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();
});
在我的代码中,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();
});