将回调代码转换为 promise

Convert callback code to promise

我想使用 bluebird 库,我的问题是如何将以下代码转换为 bluebird promise

var exec = require('child_process').exec;
var cmd = 'npm install morgan --save';

exec(cmd, function(error, stdout, stderr) {
    if(error || stderr){
        console.error(error);
        console.error(stderr);
        console.log("test");
    }
});

很简单,只需要使用 bluebird promise 构造器即可:

var Promise = require("bluebird");
var exec = require('child_process').exec;
var cmd = 'npm install morgan --save';

var promise = new Promise(function(resolve, reject){
    exec(cmd, function(error, stdout, stderr) {
        if(error || stderr)   return reject(error || stderr);  
        return resolve(stdout);
    }); 
});


promise
  .then(console.log.bind(console))      //success handler
  .catch(console.log.bind(console))     // failure handler

不要使用 promise 构造函数。请。我已经浪费了数十个小时的调试代码,而人们却错过了 这只是一件事

Bluebird 很乐意自动为您承诺,它会更快地完成并更容易调试。

var Promise = require("bluebird");
var exec = Promise.promisify(require('child_process').exec);
var cmd = 'npm install morgan --save';
exec(cmd).spread(function(stdout, stderr){
    // access output streams here    
    console.log(stdout, stderr); // output both stdout and stderr here
}).catch(function(error){
    // handle errors here
});

将来我们有一个规范的参考来将事物转换为承诺。还有一个list of how-tos here