2016-06-13 2 views
-1

So habe ich diesen Code:Wie Drossel der Warnung verhindern: ein Versprechen wurde in einem Handler erstellt, wurde aber von ihm nicht zurückgegeben

profileRepository.get(profileUuid).then((profile) => { 
    if (profile.fileUuid) { 
    profileStore.getFile(profile.fileUuid).then((fileData) => { 
     data.fileData = fileData; 
    }, callback); 
    } 

    data.profile = profile; 
}, callback); 

und ich erhalte die Warnung:

Warning: a promise was created in a handler but was not returned from it 

Welche Ich glaube, dass geschieht, weil profileStore.getFile() auch ein Versprechen zurückgibt. Jetzt allgemein die Art und Weise dieser Warnung loswerden würde die then() ‚s Kette sein, etwas zu tun, eher wie:

profileRepository.get(profileUuid).then((profile) => { 
    if (profile.fileUuid) { 
    return profileStore.getFile(profile.fileUuid); 
    } 

    data.profile = profile; 
}, callback) 
.then((fileData) => { 
    data.fileData = fileData; 
}, callback); 

Das Problem ist, dass ich profileStore.getFile() bedingt nennen, damit ich sehe nicht, wie ich kann, Verwenden Sie dann die Verkettung in diesem Fall noch sehe ich eine Möglichkeit, diesen Code auf andere Weise neu zu schreiben, um die Warnung zu verhindern. Ich versuchte return null von get() Erfolg Rückruf, aber das verhindert nicht einmal die Warnung.

Die Warnung verursacht nur, dass mein Konsolenprotokoll voll wird, was es wirklich nervig macht, wenn ich Debugging und andere Sachen machen muss, weiß jemand einen Weg, diese Warnung mit diesem Anwendungsfall zu verhindern?

UPDATE

Ich habe auch dies mit der gleichen Warnung versucht:

profileRepository.get(profileUuid).then((profile) => { 
    if (profile.fileUuid) { 
    return profileStore.getFile(profile.fileUuid); 
    } 

    data.profile = profile; 
}, callback) 
.then((fileData) => { 
    data.fileData = fileData; 
}, callback); 
+1

einfach, gibt ein Versprechen, von wo es sagen Sie, Ihre Nutzung –

+2

müssen von Callback sieht sehr seltsam aus. – robertklep

+0

@JarrodRoberson, habe ich das mit der gleichen Warnung (aktualisierte Post) versucht. – ryanzec

Antwort

0

Das Problem ist, dass ich bedingt profileStore.getFile() aufrufen, so sehe ich nicht, wie kann ich dann verketten in diesem Fall

Sie müssen hier nicht verketten. Aber Sie müssen immer return das Versprechen, wenn Sie etwas asynchron in Ihren Callbacks then tun, da sonst das äußere Versprechen nicht darauf wartet (und Sie wollen das nicht).

In Ihrem Fall können Sie ein Versprechen für nichts von dem Rückruf zurückkehren, so dass es wurde bis data.fileData wartet zugewiesen:

return profileRepository.get(profileUuid).then(profile => { 
    data.profile = profile; 
    if (profile.fileUuid) 
    return profileStore.getFile(profile.fileUuid).then(fileData => { 
     data.fileData = fileData; 
    }); 
}).then(() => data, callback); 
Verwandte Themen