然后在前一个完成之前调用Promise

时间:2016-02-03 21:51:10

标签: javascript node.js callback promise bluebird

我的节点应用程序包含以下代码:

当我运行节点应用程序时,console.log(“启动后”)在之前被称为 开始结束了,我需要 开始完成之后 我在这做错了什么?

myprocess.start(function() {
  //this is called before the start was finished.
  console.log("After start");
  server.listen(app.get('port'), function(err) {
    if (err) {
      console.error(err);
    } else {
      console.log(' listen to: ' + app.get('port'));
    }

  });
});

文件 myprocess.js 包含以下内容

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

    var run= function () {
        return Promise.all([
            childPro.create(path.join(value)),
            childPro.findAndUpdateUser()
        ]).spread(function (cmd,updatppEnv) {
            return Promise.all([childProc.executeChildProcess('exec', cmd, updatedAppEnv), Promise.delay(50).then(function (results) {
                return inter.ProcessRun(val);
            })]);
        })
    }();

 //I want that this callback will be called after the run promise will be finished 
 run.then(callback());

}

如何在完成所有启动过程后运行服务器代码

更新

对我来说,它足以等到inter.ProcessRun(val);决定调用回调怎么做?

2 个答案:

答案 0 :(得分:2)

您通过callback立即调用run.then(callback())。你想要run.then(callback)

答案 1 :(得分:0)

我猜你忘记了回复声明。 尝试

return run.then(callback);