回叫未被调用

时间:2016-02-03 19:21:06

标签: javascript node.js callback promise bluebird

我使用下面的代码,似乎没有调用回调(以Im HERE开头),不知道为什么?

console.log("im starting");
process.start(function() {
  //this line doesnt called
  console.log("im HERE");
  server.listen(app.get('port'), function(err) {
    if (err) {
      console.error(err);
    } else {
      console.log(' listen to: ' + app.get('port'));
    }

  });
});

方法开始被调用并完成......任何想法它可以是什么?

在我添加process.start之前,代码如下所示: 这可以确定,现在我需要添加此process.start,当完成时,我需要添加server.listen

module.exports = (function() {
  server.listen(app.get('port'), function(err) {
    if (err) {
      console.error(err);
    } else {
      console.log('listen ' + app.get('port'));
    }
  });
}());

更新

这是流程开始的代码

exports.start = function () {

    Validator.validateJson(function (err) {
        console.log(err);
        process.exit(1);
    });

    plugin.parse().then(function (conf) {
        require.cache.pe.configObj = conf;
    }, function (err) {
        console.log(err);
    });

    envHandler.eventE.on('AppP', function () {
        console.log('User port ' + require.cache.per);
    });
    var run= function () {
        return Promise.all([
            childPro.create(path.join(value)),
            childPro.findAndUpdateUser()
        ]).spread(function (cmd,updatedAppEnv) {
            return Promise.all([childProc.executeChildProcess('exec', cmd, updatedAppEnv), Promise.delay(50).then(function (results) {
                return inter.ProcessRun(val);
            })]);
        })
    }();

}

如果在这种情况下它的问题

,我会像bluebird一样使用promise lib

1 个答案:

答案 0 :(得分:1)

有点不清楚您想要调用回调的位置。简而言之,更改start函数以接受callback参数并在完成后调用callback()(或将其作为参数传递给then)。

exports.start = function (callback) {

    Validator.validateJson(function (err) {
        console.log(err);
        process.exit(1);
    });

    plugin.parse().then(function (configObj) {
        if (typeof require.cache.persist === 'undefined') {
            require.cache.persist = {};
        }
        require.cache.persist.configObj = configObj;
    }, function (err) {
        console.log(err);
    });

    envHandler.eventEmitterIns.on('AppPortDef', function () {
        console.log('User port ' + require.cache.persist.port);
    });
    var run= function () {
        return Promise.all([
            childPro.create(path.join(value)),
            childPro.findAndUpdateUser()
        ]).spread(function (cmd,updatedAppEnv) {
            return Promise.all([childProc.executeChildProcess('exec', cmd, updatedAppEnv), Promise.delay(50).then(function (results) {
                return inter.ProcessRun(val);
            })]);
        })
    }();

    run.then(callback);
}