2016-06-15 12 views
0

In einer öffentlichen Bibliothek spex, schrieb ich vor einer Weile und das erwies sich als sehr zuverlässig, habe ich gekämpft, um den Grund zu finden, warum Bluebird warnt mich mit Warning: a promise was created in a handler but was not returned from it.Bluebird Versprechen Leck Warnungen

Nach dem Versuch, es immer wieder zu nageln, habe ich fast aufgegeben, und jetzt bereit, das maximale Kopfgeld auf eine Lösung zu legen.

komplette Testanwendung:

'use strict'; 

var promise = require('bluebird'); 
var spex = require('spex')(promise); 

function factory(index) { 
    if (index < 2) { 
     return promise.resolve(index); 
    } 
} 

spex.sequence(factory) 
    .then(data=> { 
     console.log("success"); 
    }) 
    .catch(error=> { 
     console.log("error"); 
    }); 

komplette Konsolenausgabe:

Warning: a promise was created in a handler but was not returned from it 
    at Object.factory (D:\NodeJS\tests\test4.js:8:24) 
    at loop (D:\NodeJS\tests\node_modules\spex\lib\utils.js:69:44) 
    at Object.resolve (D:\NodeJS\tests\node_modules\spex\lib\utils.js:90:9) 
    at loop (D:\NodeJS\tests\node_modules\spex\lib\ext\sequence.js:106:28) 
    at next (D:\NodeJS\tests\node_modules\spex\lib\ext\sequence.js:160:25) 
    at $utils.resolve.call.reject.index (D:\NodeJS\tests\node_modules\spex\lib\ext\sequence.js:144:25) 
    at loop (D:\NodeJS\tests\node_modules\spex\lib\utils.js:86:17) 
    at D:\NodeJS\tests\node_modules\spex\lib\utils.js:80:25 
    at processImmediate [as _immediateCallback] (timers.js:383:17) 
From previous event: 
    at loop (D:\NodeJS\tests\node_modules\spex\lib\utils.js:77:22) 
    at Object.resolve (D:\NodeJS\tests\node_modules\spex\lib\utils.js:90:9) 
    at loop (D:\NodeJS\tests\node_modules\spex\lib\ext\sequence.js:106:28) 
    at D:\NodeJS\tests\node_modules\spex\lib\ext\sequence.js:184:9 
From previous event: 
    at promise (D:\NodeJS\tests\node_modules\spex\lib\index.js:96:24) 
    at Object.sequence (D:\NodeJS\tests\node_modules\spex\lib\ext\sequence.js:100:12) 
    at Object.sequence (D:\NodeJS\tests\node_modules\spex\lib\ext\sequence.js:193:29) 
    at Object.<anonymous> (D:\NodeJS\tests\test4.js:12:6) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Function.Module.runMain (module.js:441:10) 
    at startup (node.js:139:18) 
    at node.js:968:3 

success 
  • SPEX Bibliothek Version - jede
  • Drossel Version - jede 3.X, mit DEBUG Modus auf.
  • Node.js Version - jede
  • OS - jede
+0

https://github.com/petkaantonov/bluebird/blob/master/docs/docs/warning-explanations.md – Amit

+0

@Amit, danke, aber ich habe die gesamte Bluebird-Dokumentation zehnmal gelesen, einschließlich der Fälle, in denen die gleiche Warnung gemeldet wurde. Ich habe eine sehr gute Recherche gemacht, bevor ich meine Frage veröffentlichte. Normalerweise hätte ich es mittlerweile gefunden, wie ich weiß, verspricht es sehr gut, aber ich bin verdammt fest auf diesem einen ... –

+1

Und hast du versucht, "null" wie vorgeschlagen zurückzugeben? – Amit

Antwort

1

Die Lösung (wie here vorgeschlagen) ist zu return null von onFulfilled Funktionen, die alles andere nicht zurück.

Zum Beispiel:

.then(data=> { 
    console.log("success"); 
}) 

Sollte wahrscheinlich sein:

.then(data=> { 
    console.log("success"); 
    return null; 
}) 
+0

Großartig! Kurz, aber brillant, es hat endlich funktioniert! :)))) Ich danke dir sehr!!!! –

Verwandte Themen