我不確定最好的方式來標題這篇文章,隨意按照你的意願重新標記。如何有條件地設置解構
我有一個方法,如果它決定保釋,我讓它返回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