JavaScript箭头函数对象传递疑问:Circuit SDK代码中user对象的定义
关于Circuit SDK代码中user对象的疑问解答
先看你贴的这段代码:
const Circuit = require('circuit-sdk'); const client = new Circuit.Client({ client_id: '<client_id>', client_secret: '<client_secret>', domain: 'circuitsandbox.net' }); client.logon() .then(user => console.log('Logged on as bot: ' + user.emailAddress)) .catch(console.error);
你困惑的点应该是:为啥then里的user没提前定义,就能直接用user.emailAddress?其实这是JavaScript异步编程里的基础特性,我给你拆解开讲:
首先,
client.logon()是个异步方法,它返回的是一个Promise对象。Promise的作用就是处理这种需要等结果的操作(比如登录请求,得等服务器返回结果)。当登录成功时,Promise会触发then方法里的回调函数。你写的
user => console.log(...)是个箭头函数,这里的user是这个函数的参数。Circuit SDK在登录成功后,会自动把包含用户信息的对象作为参数传给这个箭头函数——相当于SDK帮你创建了这个user对象,直接递到你手里用,不用你提前声明。至于
user里的emailAddress,这是Circuit SDK的logon方法约定好的返回结构,登录成功后返回的用户对象里默认就包含这些字段,所以你能直接访问。
打个比方:这就像你在网上买东西,下单(调用logon())后,不用自己造商品,等卖家(SDK服务器)发货成功,快递员(Promise)会把商品(user对象)送到你指定的地址(then的回调函数),你直接拆包裹用里面的东西就行。
内容的提问来源于stack exchange,提问作者Doctor
相关产品推荐
相关产品推荐

