2016-05-31 6 views
3

ich den folgenden Code verwenden, und ich bekam die WarnungBlauer Vogel Rückkehr Versprechen fehlende Warnung

Warnung: ein Versprechen in einem Handler erstellt wurde, wurde aber nicht von es

var Promise = require("bluebird"); 
var glob = Promise.promisify(require('glob')); 

glob("files/*.js") 
      .then(function (files) { 
       files.forEach(function (file) { 
        ... 
        invoke(data,response,fn,entity,req); 
       }); 
      }).catch(function (err) { 
       console.log('error: ', err); 
      } 
     ) 
zurück

Was sollte ich tun, um es zu vermeiden?

las ich die Dokumentation von BB und es scheint, dass ich das Versprechen, wo

meine Frage ist

return sollte? Ich denke, dass in der Funktion aufrufen, aber nicht sicher, wie

dies die Funktion inovke ist

var invoke = function (data,res,fn,entity,req) { 
.... 
    for (var data in entity.app[0]) { 

     var name = entity.app[0].function; 
       try { 
        fn[name](req, res); 
       } 
       catch (err) { 
        res.status(500).send("Error" + err); 
       } 
       if (!res.headerSent) { 
        res.end("done", 200); 
       } 
      } 
     } 
    } 
}; 

zusätzlich habe ich versucht, das Versprechen wie folgt welche nicht funktioniert

var invoke = function (data,res,fn,entity,req) { 
.... 
    return new Promise(function (resolve, reject) { 
    for (var data in entity.app[0]) { 

     var name = entity.app[0].function; 
       try { 
        resolve(fn[name](req, res)); 
       } 
       catch (err) { 
        res.status(500).send("Error" + err); 
       } 
       if (!res.headerSent) { 
        res.end("done", 200); 
       } 
      } 
     } 
    } 
}; 

ich zurückkehren nicht wollen, um die Warnung zu unterdrücken Ich möchte verstehen, wie man es löst ...

Wenn ich einige zusätzliche Informationen hinzufügen müssen, lassen Sie mich bitte wissen, Im stecken hier :(

Antwort

1

teste ich den folgenden Code nicht, aber Sie sollten einen Ansatz wie diese:

var Promise = require("bluebird"); 
var glob = Promise.promisify(require('glob')); 

glob("files/*.js").then(function (files) { 

    return Promise.all(files.map(function (file) { 
      return invoke(data,response,fn,entity,req); 
     }) 
    ); 
}).catch(function (err) { 
    console.log('error: ', err); 
    res.status(500).send("Error" + err); 
}).finally(function(){ 
    if (!res.headerSent) { 
     res.end("done", 200); 
    } 
}); 

var invoke = function (data,res,fn,entity,req) { 

    return new Promise(function (resolve, reject) { 
     for (var data in entity.app[0]) { 

      var name = entity.app[0].function; 
      try { 
       fn[name](req, res); 
      } 
      catch (err) { 
       reject(err); 
      } 
     } 
    } 
}; 
+0

Vielen Dank! Dies löst das Problem, das (zumindest für mich) kompliziert zu verstehen war. Könnten Sie bitte, warum das Problem lösen und nicht einfach zurück ... –

+0

Sie mussten das neue Versprechen an die Kette zurückgeben, und da Sie mehrere Versprechen erstellt haben, muss Promise.all() verwenden. Wenn Sie den Fehler bei der invoke-Funktion abfangen, müssen Sie nur dieses spezielle Versprechen ablehnen, um den Fehler auf die Kette zu übertragen. – Roberto14

Verwandte Themen