web-dev-qa-db-fra.com

DeprecationWarning: L'appel d'une fonction asynchrone sans rappel est obsolète. - comment trouver où se trouve la "fonction:"

J'ai récemment mis à jour mon noeud vers la version 7.2.1 et j'ai remarqué qu'il y avait un avertissement à venir:

DeprecationWarning: L'appel d'une fonction asynchrone sans rappel est obsolète.

A quoi sert ce 4346? Je n'ai que 2000 lignes dans le fichier js, donc il ne peut pas s'agir d'un numéro de ligne. Où puis-je trouver le code?

25
AGamePlayer

Vous pouvez utiliser les options --trace-deprecation ou --throw-deprecation .

Par exemple:

node --trace-deprecation app.js

ou:

node --throw-deprecation app.js

La première option consignera une trace de pile et la seconde une erreur (qui, si elle n’est pas interceptée, consignera également une trace de pile).

De plus, 4346 est très probablement l'ID de processus.

51
cartant

Vous devez inclure une fonction de rappel pour la méthode asynchrone (writeFile dans votre cas).

Par exemple

var fs = require('fs');
fs.writeFile('writeMe.txt',data,'utf8',(error)=>{
    // your code goes here
});

(error) => { });

est la fonction de rappel.

Depuis la version: v7.0.0
Le paramètre de rappel n'est plus facultatif. Si vous ne le passez pas, un avertissement de dépréciation sera émis.

Veuillez consulter: https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback .__ pour plus d’informations.

3
NewDev2017

Je préfère les deux méthodes suivantes, moi-même.

1:

fs.writeFile('example.md', data, (error) => { console.log("Error!"); });

2:

fs.writeFile('example.md', data, function (err) {
    if(err){
        throw err;
    }
});
2
Matti

c'est parce que vous n'avez pas intercepté d'erreur en utilisant err callback

fs.write('./abc.txt',function(err){
    if(err){
        return console.log(err);
    }
    else
    {
        console.log('success.!');
    }
});
0
jayesh sheta

J'ai le même avertissement 

[DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated. 

et a eu le même problème de ne pas savoir quelle partie de mon code était la cause. Alors j'ai regardé le code que j'avais récemment modifié et j'ai vu cette déclaration-suspect:

 Fs . writeFile (path, aString, cb, encoding);

Le problème était le cb (= 'callback') et les arguments de codage sont dans le mauvais ordre . Je me suis débarrassé de l'avertissement simplement en remplaçant ce qui précède par:

 Fs . writeFile (path, aString, encoding,  cb);

Mais le problème est vraiment avec le message d'avertissement ERRONEOUS . Je passais dans un argument de rappel mais juste un argument qui N'était pas une fonction mais une chaîne. Donc, si l'avertissement avait Dit 

"WWARNING: calling fs.writeFile() with a string-argument 
 where a function is expected"

... il aurait été évident ce qui se passait. Bien sûr, un numéro de ligne dans l’avertissement serait également Nice. 

Donc, le fait est que je n’appelais PAS writeFile () sans Un callback-argument, qui est obsolète. J'appelais writeFile () avec un type d'argument incorrect . Cela devrait être une erreur, pas un avertissement.

0
Panu Logic

il suffit de mentionner:

fs.writeFile('<your file name>',<your data>,function(){});

ici, vous devez mentionner function () {} puisqu'il s'agit d'un callback () pour écrire du texte de manière asynchrone.

Utiliser writeFileSync fera un appel synchrone

0
Ayush Bansal