Как условно установить деструктуризацию

1

Я не был уверен, что лучший способ назвать этот пост, не стесняйтесь переиздавать его по своему усмотрению.

У меня есть метод, который, если он решает взять под залог, я возвращаю null. В противном случае это вернет обещание.

На стороне приема, как я могу управлять обоими сценариями? Например, я пытаюсь понять, как зафиксировать случай, когда он освобождается (я возвращаю null из вызова deletePRBucket:

Caller - мой тест

it('can create a new S3 branch', async () => {
  const options = { branch: '11' }
   // first lets check if we delete it if it already exists before trying to re-create it
  let { error, stdout, stderr } = await Deploy.deletePRBucket(options.branch)

   ({ error, stdout, stderr } = await Deploy.createPRBucket(options)),
          result = JSON.parse(stdout)

          expect(result.Location).to.equal('http://oursite-${options.branch}.s3.amazonaws.com/')
})

Таким образом, я получаю здесь ошибку, что error значений, stdout и stderr не существуют, потому что мой метод удаления возвращает null, если он не пытается удалить (поскольку ведро не существует). Поэтому не уверен, как обращаться с тем случаем, когда он решает взять под залог и возвращает null вместо того, чтобы возвращать обещание.

ОБНОВЛЕНО (также включает реализацию bucketExists):

Реализация

export async function bucketExists(bucketName){
  console.log('attempting to find bucket oursite-${bucketName}')
  let exists = null
  try {
    let { error, stdout, stderr } = await exec('aws s3api head-bucket --bucket oursite-${bucketName}')
    exists = stdout === ""
  }
  catch(err){
    exists = false
  }

  return exists
}

export async function deletePRBucket(branch){
  const bucketExists = await this.bucketExists(branch)
  if(!bucketExists) {
    return new Promise((resolve) => {
      resolve({ error, stdout, stderr })
    })
  }

  return exec('aws s3 rb s3://oursite-${branch} --force')
}

Я имею в виду, я полагаю, я мог бы просто вернуть объект {error, stdout, stderr} и проверить, что stdout имеет значение null или что-то в этом роде, возможно, вернет обещание? if(!bucketExists) return new Promise(() => { error, stdout, stderr })

Теги:
ecmascript-6
asynchronous

2 ответа

0

Предоставьте объект по умолчанию, который будет использоваться, если обещание возвращает null.

let { error, stdout, stderr } = (await Deploy.deletePRBucket(options.branch)) || {};
  • 0
    это потребовало бы, чтобы звонок был сделан ДО {}. Если корзина даже не существует, я даже не хочу вызывать deletePRBucket ... вот почему у меня есть первая проверка на существование корзины. Может я неправильно понимаю ваш код ???
  • 0
    К вашему сведению обновленный пост, я включил немного больше информации
Показать ещё 1 комментарий
0

Я думаю, что это вопрос обработки ошибок:

export async function deletePRBucket(branch){
  const bucketExists = await this.bucketExists(branch)
  if(!bucketExists) throw new Error("bucket");

  return exec('aws s3 rb s3://oursite-${branch} --force')
}

...

try{
 let { error, stdout, stderr } = await Deploy.deletePRBucket(options.branch);
}catch(e){
  console.log("error");
}
  • 0
    ну, я не хочу выдавать ошибки, я бы утешил это. вызывающий должен иметь возможность легко проверить, был ли он создан или нет. Если удаление не удалось, то оно регистрируется
  • 0
    @positiveguy вот что он делает. Сгенерированные ошибки можно отловить ...
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню