簡體   English   中英

如何有條件地設置解構

[英]How to conditionally set destructuring

我不確定這篇文章的最佳標題,可以隨意重新編輯它。

我有一個方法,如果它決定保釋,我讓它返回null。 否則它會返回一個承諾。

在接收方,我如何管理這兩種方案? 例如,我試圖弄清楚如何捕獲它保釋的情況(我從deletePRBucket的調用中得到null:

來電者 - 我的測試

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/`)
})

所以我在這里得到一個錯誤,值errorstdoutstderr不存在,因為如果我的delete方法沒有嘗試刪除(因為存在桶不存在),我的delete方法返回null。 所以不確定如何處理它決定保釋並返回null而不是返回promise的情況。

UPDATED (還包括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 })

我認為這是錯誤處理的問題:

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");
}

如果promise返回null則提供要使用的默認對象。

let { error, stdout, stderr } = (await Deploy.deletePRBucket(options.branch)) || {};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM