我正在用Node.js编写C ++插件,并创建了一个异步函数,并通过回调和Promise进行了尝试。回调需要300毫秒至1000毫秒才能执行,而Promise则需要1800毫秒至5000毫秒才能完成相同的工作。
该插件将Minmax算法与马尔可夫决策过程一起使用,以决定在连接四局游戏中的棋步。代码如下:
回调:
socket.on('play', row => {
console.time('play');
play(socket, Game, row);
Game.minimax(AImove => {
play(socket, Game, AImove - 1);
console.timeEnd('play');
});
});
/*
* play: 1170.922ms
* play: 984.421ms
* play: 1324.559ms
* play: 1147.240ms
*/
ASYNC / AWAIT:
const minimax = Game => {
return new Promise(resolve => {
Game.minimax(AImove => {
resolve(AImove);
});
});
};
socket.on('play', async row => {
console.time('play');
play(socket, Game, row);
const AImove = await minimax(Game);
play(socket, Game, AImove - 1);
console.timeEnd('play');
});
/*
* play: 1838.339ms
* play: 3204.243ms
* play: 3245.432ms
* play: 4590.880ms
*/
我演奏了完全相同的动作序列,使用带有节点插件的ASYNC / AWAIT是一种不好的做法吗?还是我做错了什么?
答案 0 :(得分:1)
通常,当我看到Promise或异步函数需要很长时间才能执行时,这是因为该函数最后没有返回任何值。它将在函数末尾运行,而不会返回任何结果,只是超时。另外,嵌套Promises是不好的做法。