首页 > 解决方案 > NodeJS:从交互式控制台处理 Promise

问题描述

我正在学习 NodeJS。我发现真正令人讨厌的一件事是,在调试和/或只是在各种库的接口上闲逛时使用交互式控制台的 Promise。工作流程正常;调用一些库来做一些工作,等待结果,查看结果以查看它的实际行为和外观。

例如(仅举例)我想以交互方式检查从Jimp返回的图像数据结构。我发现自己从控制台这样做:

const Jimp = require('jimp');
const fs = require('fs');
let data = fs.readFileSync('path/to/my/test/images')
let image = null
Jimp.read(data).then((result, error) => { image = result; });
// Work with image here ...

这个样板写起来很烦人。我想我错过了一个技巧。有没有更方便的方法来解决这个问题?可以设置一个设置,或者我可以加载一个库还是什么?

我宁愿这样做:

...
let image = await Jimp.read(data);
// Work with image here ...

但这给出了“SyntaxError:await 仅在异步函数中有效”。或者,如果不是这样,那么也许:

...
let image = resolveMe(Jimp.read(data))
// Work with image here ...

PS“异步/等待”不是这个问题的答案。为了评估异步函数,您必须将控制权交还给事件循环,并且您不能在当前 AFAIK的交互式提示下执行此操作。

标签: node.jses6-promise

解决方案


我偶然发现了我的 Q 的 SO答案。对于节点 v12+,您可以设置--experimental-repl-await选项。一直就在我的眼皮底下……总结:

没有:

$ node
Welcome to Node.js v12.18.1.
Type ".help" for more information.
> await Promise.resolve(7)
await Promise.resolve(7)
^^^^^
Uncaught SyntaxError: await is only valid in async function

和:

$ node --experimental-repl-await
Welcome to Node.js v12.18.1.
Type ".help" for more information.
> await Promise.resolve(7)
7

推荐阅读