Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何有条件地设置解构_Javascript_Asynchronous_Ecmascript 6 - Fatal编程技术网

Javascript 如何有条件地设置解构

Javascript 如何有条件地设置解构,javascript,asynchronous,ecmascript-6,Javascript,Asynchronous,Ecmascript 6,我不确定这篇文章的最佳标题,请随意重新命名 我有一个方法,如果它决定退出,我让它返回null。否则,它将返回一个承诺 在接收端,我如何管理这两种情况?例如,我试图找出如何捕获它退出的情况(我从deletePRBucket调用中返回null: 来电者-我的测试 it('can create a new S3 branch', async () => { const options = { branch: '11' } // first lets check if we delete

我不确定这篇文章的最佳标题,请随意重新命名

我有一个方法,如果它决定退出,我让它返回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/`)
})
因此,我在这里得到一个错误,即值
error
stdout
stderr
不存在,因为我的delete方法在不尝试删除时返回null(因为bucket不存在)。因此,我不确定如何处理它决定放弃并返回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或者类似的东西,或者返回一个承诺?
如果(!bucketExists)返回新的承诺(()=>{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");
}

我认为这是一个错误处理的问题:

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

如果承诺返回
null
,请提供要使用的默认对象

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

如果承诺返回
null
,请提供要使用的默认对象

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

为什么不总是返回一个承诺,并根据函数是否退出来解决或拒绝它呢?我选择了返回一个承诺来解决{error,stdout,stderr}很酷。祝你们好运!记住exec()我看到更新后的帖子了,我包括了更多的信息。为什么不总是返回一个承诺,并根据函数是否退出来解决或拒绝它呢?我选择了返回一个承诺来解决{error,stdout,stderr}很酷。祝你们好运!记住exec()如果我看到更新的帖子,我包含了更多的信息。我不想抛出错误,我会把它记录下来。调用者应该能够很容易地检查它是否被创建。如果删除失败,那么它就是日志。我现在知道你做了什么。但是我真的想依靠他们记住尝试/捕获。我希望它失败得很好让我们假设我想在createBucket之前运行这个delete,我调用delete,然后调用create,如果它不能删除一个不存在的bucket,我不希望它爆炸,因为如果它不能删除,那么我的createBucket就不会被调用。你知道我的意思吗?我不想抛出错误,我会控制台记录它。调用方应该是able可以很容易地检查它是否被创建。如果删除失败,那么它就是loggedcool。我现在知道你做了什么。但是我真的想依靠他们记住尝试/捕获。我希望它失败得更好。所以让我们假设我想在CreateBack之前运行这个删除,我调用delete,然后调用create,如果它不能删除一个不存在的bucket,因为如果它删除了,那么我的createBucket就不会被调用。你知道我的意思吗?那需要在{}之前进行调用。如果bucket根本不存在,我甚至不想调用deletePRBucket…这就是我第一次检查bucket是否存在的原因。可能我误解了您的代码???bucket的检查在
deletePRBucket
中,为什么在调用之前还需要检查它是否存在?这需要进行调用在{}之前。如果bucket根本不存在,我甚至不想调用deletePRBucket…这就是为什么我第一次检查bucket是否存在的原因。也许我误解了你的代码???对bucket的检查在
deletePRBucket
中,为什么在调用之前还需要检查它是否存在?