Ich habe begonnen, mit Promises zu betrachten und habe damit begonnen, eine einfache Funktion zusammenzustellen und es ein paar Mal aufrufen. Ich brauche eine Plausibilitätsprüfung um abzulehnen und zu lösen.Wie richtig zu verwenden und für Versprechen Verweigern
- Ist dies der richtige Weg, um eine Funktion "Promistifizieren"?
- Ist dies der richtige Weg, um mit Ablehnung und Auflösung umzugehen?
Alles, was ich falsch verstanden habe?
const Redis = require('ioredis'); const redis = new Redis({ port: 6379, host: '127.0.0.1' }); function checkValues(name, section) { return new Promise((resolve, reject) => { redis.multi() .sismember('names', name) .sismember('sections', section) .exec() .then((results) => { if(results[0][1] === 1 && results [1][1] ===1) { reject('Match on both.'); } else if(results[0][1] === 1 || results [1][1] ===1) { reject('Match on one.'); } else { redis.multi() .sadd('names', name) .sadd('sections', section) .exec() .then((results) => { // Lazy assumption of success. resolve('Added as no matches.'); }) // No catch needed as this would be thrown up and caught? } }) .catch((error) => { console.log(error); }); }); } // Call stuff. checkValues('barry', 'green') .then((result) => { // Added as no matches "resolve" message from 'barry', 'green' console.log(result); retutn checkValues('steve', 'blue'); }) .then((result) => { // Added as no matches "resolve" message from 'steve', 'blue' retutn checkValues('steve', 'blue'); }) .then((result) => { // Match on both "reject" message from 'steve', 'blue' console.log(result); }) .catch((error) => { console.log(error); });
Danke für die ausführliche Antwort. Wenn ich zurückkomme, kann ich mehrere Werte zurückgeben: {success: 'false', Nachricht: 'single match'}. Oder gibt es einen besseren/standardisierten Weg, dies zu erreichen? –
Ja, das ist genau der Weg, um mehrere Werte zurückzugeben. In der Tat ist es der einzige Weg. (OK, Sie können auch ein konstruiertes Objekt anstelle eines einfachen Objekts zurückgeben, aber das ist im Wesentlichen das Gleiche). –