Я не был уверен, что лучший способ назвать этот пост, не стесняйтесь переиздавать его по своему усмотрению.
У меня есть метод, который, если он решает взять под залог, я возвращаю 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 })
Предоставьте объект по умолчанию, который будет использоваться, если обещание возвращает null
.
let { error, stdout, stderr } = (await Deploy.deletePRBucket(options.branch)) || {};
Я думаю, что это вопрос обработки ошибок:
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");
}