2017-02-23 12 views
1

Почему код в Promise.then() не был вызван?Почему код в Promise.then() не был вызван?

Я пишу сервер с выражениями expressjs и bluebird. Когда я пытался обещать функцию с помощью Promise.promisify(), я обнаружил, что код, который я написал в Promise.then(), не работает. Мои коды являются следующие

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'); 
    }); 

я отправляю запрос на «/ тест» и только видел 123 напечатаны в console.How я мог сделать коды в Promise.then() работает?

+2

[читать документацию по promisify] (HTTP : //bluebirdjs.com/docs/api/promise.promisify.html), чтобы лучше понять ошибочные допущения, которые вы сделали, и то, что ваш код делает неправильно –

ответ

1

Promise.promisify создает механизм, который автоматически передает функцию обратного вызова в качестве последнего аргумента вашей исходной функции. Ваша функция не выполняет функцию обратного вызова и никогда не называет ее, поэтому нет возможности решить проблему.

Если функция не асинхронно, нет особого смысла в promisifying, но вот как вы могли бы сделать так:

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>

Смежные вопросы