JavaScript中function(err, result)回调是什么?prompt库result参数如何赋值?
prompt.get 方法的result参数赋值逻辑
Node.js 生态的异步API默认遵循错误优先回调约定:回调函数第一个参数为错误对象(操作成功时值为null),第二个参数为操作成功的返回结果,你所用的prompt库也符合该规范。
具体的参数赋值流程如下:
- 当你调用
prompt.get(['name'], 回调函数)时,prompt库不会立刻执行回调,会先把你传入的回调函数暂存在内部的任务队列中,同时启动终端输入流的监听逻辑,等待用户输入。 - 若监听过程出现异常(比如终端输入流报错、用户按下
Ctrl+C终止输入),prompt会生成对应的Error实例,直接调用你传入的回调,把Error实例赋值给第一个参数err,此时result为undefined。 - 若用户正常输入内容并按下回车确认,prompt会先完成输入校验(你这段代码没有配置校验规则,会直接跳过该步骤),之后按照你传入的字段列表
['name']构造结果对象:用户输入的内容会被赋值给该对象的name属性,这个组装好的对象就是result。之后prompt会调用你传入的回调,把第一个参数err设为null,第二个参数传入刚组装好的结果对象。 - 回调被触发时,拿到的
result就是prompt内部组装好的输入结果对象,你就可以通过result.name读取到用户输入的内容。
你可以参考如下简化版的伪代码,理解prompt.get的内部实现逻辑:
// 简化版prompt.get内部实现逻辑 prompt.get = function (fields, callback) { // 启动终端输入监听 const inputStream = process.stdin; inputStream.resume(); inputStream.once('data', (buffer) => { try { const userInput = buffer.toString().trim(); // 按照传入的字段组装结果对象 const result = {}; fields.forEach(field => { result[field] = userInput; }); // 操作正常,触发回调传入结果 callback(null, result); } catch (err) { // 操作出错,触发回调传入错误 callback(err); } finally { inputStream.pause(); } }) }
内容的提问来源于stack exchange,提问作者shn
相关产品推荐
相关产品推荐

