我不确定最好的方式来标题这篇文章,随意按照你的意愿重新标记。如何有条件地设置解构
我有一个方法,如果它决定保释,我让它返回null。否则它会返回一个承诺。
在接收端,我如何管理这两种情况?比如我想弄清楚如何在那里捞出捕捉的情况下(我从呼叫deletePRBucket空回:
来电 - 我的测试
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方法没有尝试删除(因为存储桶不存在),我的delete方法返回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`)
}
我的意思是,我想我可以只返回一个对象{错误,标准输出,标准错误}和检查标准输出为空或类似的东西,也许会返回一个承诺? if(!bucketExists) return new Promise(() => { error, stdout, stderr })
为什么不总是返回一个承诺,并决定或拒绝它取决于函数是否退出? – AtheistP3ace
我与退回承诺,解决{错误,stdout,stderr} – PositiveGuy
酷。祝你好运! – AtheistP3ace