2017-02-23 1 views
1

Warum wurde der Code in Promise.then() nicht aufgerufen?Warum wurde der Code in Promise.then() nicht aufgerufen?

Ich schreibe einen Server mit Expressjs und Bluebird Versprechung. Als ich versuchte, eine Funktion Promise.promisify() zu promisifizieren, fand ich, dass der Code, den ich in Promise.then() schrieb, nicht funktioniert. Meine Codes sind als

var Promise = require('bluebird'); 

var test = function(req) { 
    console.log('123'); 
}; 

var regist=Promise.promisify(test); 

app.post('/test', function (req, res) { 
    reg.regist() 
    .then(function() { 
     console.log('456'); 
    }); 

folgen poste ich eine Anfrage an ‚/ test‘ und sah 123 in der console.How konnte ich die Codes in der Promise.then() funktioniert nur dann gedruckt?

+2

[in der Dokumentation zu promisify lesen] (http : //bluebirdjs.com/docs/api/promise.promisify.html), um ein besseres Verständnis für die schlechten Annahmen zu erhalten, die Sie gemacht haben und was Ihr Code falsch macht –

Antwort

1

Promise.promisify erstellt einen Mechanismus, der automatisch eine Callback-Funktion als letztes Argument an Ihre ursprüngliche Funktion übergibt. Ihre Funktion nimmt keine Callback-Funktion und ruft nie eine Callback-Funktion auf, so dass das Versprechen nicht aufgelöst werden kann.

Wenn Ihre Funktion nicht asynchron ist, gibt es nicht viel Sinn, es in promisifying, aber hier ist, wie Sie dies tun könnte:

var test = function(req, callback) { 
 
    console.log('123'); 
 

 
    callback(); 
 
}; 
 

 
var regist = Promise.promisify(test); 
 
var request = { someProperty: 'some value'}; 
 

 
regist(request) 
 
    .then(function() { 
 
    console.log('456'); 
 
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.4.7/bluebird.min.js"></script>

Verwandte Themen