Ich war nicht sicher der beste Weg, diesen Beitrag zu titeln, fühlen Sie sich frei, es wie Sie wünschen, umzubenennen.Wie man Destrukturierung bedingt einstellt
Ich habe eine Methode, die, wenn sie beschließt, zu bailen, ich habe es null zurückgeben. Sonst gibt es ein Versprechen zurück.
Auf der Empfängerseite, wie kann ich beide Szenarien verwalten? Zum Beispiel ich versuche, herauszufinden, wie der Fall zu erfassen, wo sie bürgt (I aus dem Aufruf null zurück zu deletePRBucket erhalten:
Caller - Mein Test
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/`)
})
So bekomme ich einen Fehler Hier, dass die Werte error
, stdout
und stderr
nicht existieren, weil meine Methode delete eine Null zurückgibt, wenn sie nicht versucht zu löschen (weil der Bucket nicht existiert). So nicht sicher, wie der Fall zu behandeln, wo es entscheidet um zu bailen und gibt null zurück, anstatt das Versprechen zurückzugeben
AKTUALISIERT (gehörte auch die bucketExists Implementierung):
Implementierung
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`)
}
ich meine ich nehme an, ich nur ein Objekt {Fehler, stdout, stderr} zurückkehren konnte und prüfen, ob stdout ist null oder etwas ähnliches, vielleicht ein Versprechen abgeben? if(!bucketExists) return new Promise(() => { error, stdout, stderr })
Warum nicht immer ein Versprechen zurückgeben und es auflösen oder ablehnen, abhängig davon, ob die Funktion ausläuft oder nicht? – AtheistP3ace
Ich ging mit der Rückkehr ein Versprechen, das löst {Fehler, stdout, stderr} – PositiveGuy
Cool. Viel Glück! – AtheistP3ace