Как правильно передать параметр? - PullRequest
0 голосов
/ 06 января 2020
const root = {
    user: (id) => {
        console.log("returning object " + JSON.stringify(id.id) + " " + JSON.stringify(storage.select("users", id.id)))
        return storage.select("users", id.id)
    }
}

Я хочу вызвать функцию стрелки в root.user, но я думаю, что не могу правильно передать параметр, поэтому я попробовал это -> let user = root.user('101'), и на консоли я получил это ->

возвращаемый объект не определен

[{"firstName":"Gokhan","lastName":"Coskun","login":"gcoskun","id":101}]
{"firstName":"George","lastName":"Clooney","login":"gclooney"}
[{"firstName":"Gokhan","lastName":"Coskun","login":"gcoskun","id":101}]

Я хотел, чтобы пользователь с идентификатором 101 был возвращен и получил вместо него всех возвращенных пользователей.

1 Ответ

2 голосов
/ 06 января 2020

Почему вы делаете id.id, но проходите string? Вы либо передаете объект с id prop (root.user({ id: '101' })), либо заменяете id.id просто id.

Кроме того, похоже, что поля id в ваших пользовательских объектах имеют тип number, пока вы передаете string, поэтому в зависимости от логики c внутри storage.select вам, возможно, придется изменить это.

Передача number id:

// Just mocking it for the example:
const storage = {
  select(key, id) {
    return [
      { firstName: 'Gokhan', lastName: 'Coskun', login: 'gcoskun', id: 101 },
      { firstName: 'George', lastName: 'Clooney', login: 'gclooney' }, 
      { firstName: 'Gokhan', lastName: 'Coskun', login: 'gcoskun', id: 101 },
      // Depending on the logic here, these types need to match.
      // Using == instead of === so that it's not required here.
    ].filter(user => user.id == id)
  },
};

const root = {
  user: (id) => {
      console.log(`ID = ${ id }`);
      
      // We make sure we only return a single user or null if there isn't one:
      return storage.select('users', id)[0] || null;
  },
};


const user = root.user('101');

console.log(user);

Передача object с id реквизитом типа number:

// Just mocking it for the example:
const storage = {
  select(key, id) {
    return [
      { firstName: 'Gokhan', lastName: 'Coskun', login: 'gcoskun', id: 101 },
      { firstName: 'George', lastName: 'Clooney', login: 'gclooney' }, 
      { firstName: 'Gokhan', lastName: 'Coskun', login: 'gcoskun', id: 101 },
      // Depending on the logic here, these types need to match.
      // Using == instead of === so that it's not required here.
    ].filter(user => user.id == id);
  },
};

const root = {
  user: (query) => {
      console.log(`ID = ${ query.id }`);
      
      // We make sure we only return a single user or null if there isn't one:
      return storage.select('users', query.id)[0] || null;
  },
};

const user = root.user({ id: '101' });

console.log(user);
...