2017-10-16 2 views
3

NodeJS mir eine Warnungirreführende Warnung „Aufruf eine asynchrone Funktion ohne Rückruf ist veraltet“

(Knoten: 32.600) ergibt: veraltete Aufruf eine asynchrone Funktion ohne Rückruf [DEP0013] DeprecationWarning.

, als ich diesen ‚Test‘ laufen:

describe('whatever',() => { 
    it('test simple', async() => { 
    const dir = './build/fileTests'; 

    if (fs.existsSync(dir)) { 
     console.log(`deleting ${dir}`); 
     await fs.rmdir(dir); 
    } 
    }); 
}); 

Nun, würde ich fast zustimmen, dass ohne einen Rückruf Asynchron-Funktionen schlecht ist (da nur im cb Sie sicher wissen kann, es passierte, geh weiter, etc ...

... wenn es nicht für meine absichtliche Verwendung der ES7 async/await war, weil sie es synchron machen, so kann ich mit dem arbeiten, was auch immer ich bekomme ... (in diesem Sonderfall könnte ich auf rmdirSync ausweichen, aber das ist nicht mein Punkt ...)

so meine Frage: Wie kann ich Warnungen wie diese loswerden?

- in einer sinnvollen Art und Weise, bei der Arbeit mit Asynchron/await ... - mit dem Rückgabewert zu tun, wie in const r = ... nicht als 'Callback-Handling' erkannt wird ...

+0

'async/await' asynchronen Code machen nicht synchron Umgang hinzufügen. Es mag aussehen, aber es ist nicht so. – robertklep

+2

das erinnert mich an Callbacks als async Lüge –

Antwort

5

fs.rmdir tut ein Versprechen-Objekt nicht zurückgeben, deshalb schlägt dieser Code mit Swag fehl. Sie müssen es promisify, eine Bibliothek oder die node.js promisify Methode in util Kernmodul

Hinweis verwenden: Wenn Sie diese gleichen Ansatz für andere Methoden Asynchron verwenden im fs Core-Modul, wird es scheitern

tun dies

const util = require("util"); 
const fs = require("fs"); 
const removeDir = util.promisify(fs.rmdir); 

const rmDir = async() => { 
    try { 
     await removeDir("directory_name"); 
    } catch(ex) { 
     console.error(ex) 
    } 
} 

So stellen Sie sicher, dass Sie promisify es

Edit: erklärt eine Variable, um den Wert von uti.promisify(fs.rmdir) durch wie vorgeschlagen @bergi

bearbeiten zu halten: Fehler mit try .. catch Block

+2

Beachten Sie, dass Sie den 'util.promisify' Aufruf außerhalb der Funktion" rmDir "setzen und das Ergebnis speichern sollten. – Bergi

+2

Änderungen wurden vorgenommen. Danke @Bergi. –

Verwandte Themen