2017-02-02 10 views
0

Ich verwende Bluebird für Versprechen, sondern auch mit einer Bibliothek, die ein Versprechen nicht-Bluebird zurückgibt. Ich möchte .asCallback verwenden. Ich habe versucht, Promise.resolve zu verwenden, um es zu wickeln, das ich irgendwo anders online fand, aber es verbirgt die Fehler in der Versprechenskette. Im Code, wenn ich das then/catch herausnehme, löst es, anstatt einen Fehler vom Klientenanruf zu werfen, obwohl ein Fehler geschah.Wie wickle ich ein Versprechen mit Bluebird

Neben dem Erstellen eines neuen Versprechens mit new Promise(resolve,reject), die eine offensichtliche Lösung ist, gibt es einen besseren Weg, um es zu einem Bluebird-Versprechen zu konvertieren, eine, die Fehler an die ursprüngliche Versprechenskette propagieren wird?

module.exports.count = function(params, done){ 
    var promise = client.count({ 
    "index": config.search.index + "_" + params.index 
    }).then(function(response){ 
    logger.debug(response); 
    }).catch(function(e){ 
    logger.error(e); 
    }); 
    return Promise.resolve(promise).asCallback(done); 
+0

Was meinen Sie mit "* es verbirgt die Fehler in der Versprechungskette *"? 'Promise.resolve' macht das sicher nicht. Ihr 'catch()' Anruf könnte jedoch. – Bergi

Antwort

1

Promise.resolvenicht Fehler propagieren. Ihr Problem scheint zu sein, dass catch sie behandelt, bevor sie die resolve erreichen konnten. Sie sollten dabei sein

function count(params, done){ 
    return Promise.resolve(client.count({ 
    "index": config.search.index + "_" + params.index 
    })).then(function(response){ 
    logger.debug(response); 
    return response; // important! 
    }, function(e){ 
    logger.error(e); 
    throw e; // important! 
    }).asCallback(done); 
} 
+0

Vielleicht ist es etwas anderes in der Kette der Elternversprechen. Ich habe das Catch nur hinzugefügt, um es zu beheben, daher ist mein Code-Beispiel tatsächlich schlecht. Lass mich nochmal überprüfen. –

+0

Ich denke, es ist nur ein Fehler von mir in der Elternkette Handler. Ich lerne immer noch, wie man Versprechungen richtig nutzt ... –

Verwandte Themen