有人可以向我解释一下:'create(email: emailArg = ) '吗?

Posted

技术标签:

【中文标题】有人可以向我解释一下:\'create(email: emailArg = ) \'吗?【英文标题】:Can someone please explain me this: 'create(email: emailArg = ) '?有人可以向我解释一下:'create(email: emailArg = ) '吗? 【发布时间】:2019-11-28 03:57:23 【问题描述】:

我还在学习 JS。做 Apollo GraphQL 教程:https://www.apollographql.com/docs/tutorial/introduction/

而且我不太明白这部分:findOrCreateUser( email: emailArg = )

完整代码如下:

   /**
   * User can be called with an argument that includes email, but it doesn't
   * have to be. If the user is already on the context, it will use that user
   * instead
   */
  async findOrCreateUser( email: emailArg  = ) 
    const email =
      this.context && this.context.user ? this.context.user.email : emailArg;
    if (!email || !isEmail.validate(email)) return null;

    const users = await this.store.users.findOrCreate( where:  email  );
    return users && users[0] ? users[0] : null;
  

  async bookTrips( launchIds ) 
    const userId = this.context.user.id;
    if (!userId) return;

    let results = [];

    // for each launch id, try to book the trip and add it to the results array
    // if successful
    for (const launchId of launchIds) 
      const res = await this.bookTrip( launchId );
      if (res) results.push(res);
    

    return results;
  

请教育我或提供解释链接。谢谢。

【问题讨论】:

What is destructuring assignment and its uses?的可能重复 来自 MDN:Setting a function parameter's default value 示例代码:jsfiddle.net/khrismuc/e374v2h0 所以,它基本上像findOrCreateUser( email: emailArg )?那加= 有什么意义呢? 【参考方案1】:

我认为:

1) 该函数期望接收一个 javascript 对象作为其第一个参数,该对象内部有一个名为 email 2)在函数内部,我们将email属性称为emailArg

最后,= 部分提供了一个空对象作为默认值,有助于避免错误。


函数参数解构的更详细解释可以在这里找到:https://davidwalsh.name/destructuring-function-arguments

【讨论】:

【参考方案2】:
findOrCreateUser( email: emailArg  = )

是几个原则的结合

1) 对象解构

const  prop  = obj;

相当于:

const prop = obj.prop;

2) 函数参数解构

同样的事情,只是函数的参数

function fun( prop ) 
  console.log(prop);

等价于

function fun(obj) 
  console.log(obj.prop);

3) 解构时重命名变量

function fun( prop: newPropName ) 
  console.log(newPropName);

等价于

function fun(obj) 
  const newPropName = obj.prop;
  console.log(newPropName);

4) 默认函数参数

function fun(arg = 5) 
  console.log(arg); 


fun(10); // prints 10
fun(); // prints 5 since no value was passed to fun

结论:

findOrCreateUser( email: emailArg  = ) 
 // [...]

相当于

findOrCreateUser(args) 
  const emailArg = args ? args.email : ;
  // [...]

换句话说,它将传递给方法的对象的email 属性重命名为emailArg,并使其直接可用。如果没有任何内容传递给函数,它还会将参数初始化为空对象。这是为了避免在未通过任何内容时引发Cannot read email of undefined

如果您需要更多上下文,这里是文档:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Assigning_to_new_variable_names

【讨论】:

以上是关于有人可以向我解释一下:'create(email: emailArg = ) '吗?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以向我解释一下逻辑回归中成本函数和梯度下降方程之间的区别吗?

有人可以简单地向我解释啥是有向无环图吗?

有人可以解释 Spring Security BasePermission.Create 吗?

有人能解释一下这个功能吗

有人可以向我解释为啥这是可能的吗? [复制]

有人可以向我解释为啥 L(长)必须在那里吗? [复制]