如何在Q javascript中返回最后一个值

时间:2015-12-09 02:26:24

标签: javascript promise q

嗨,我很高兴在javascript中写承诺。我想从func1返回一个值,该值由当时(使用q)组成,调用解析值然后传递给下一个函数的其他函数。问题是我想返回func 1中的最后一个值。所以我可以在调用函数中使用它。但init值只返回undefined。 以下是代码:

function func1(string1, string2) {
  othermodule
    .otherfunc1(string1)
    .then(function(outputstring1) {
      var params = othermodule.otherfunc2(outputstring1,string2);
      return params;
    })
    .then(anotherfunc)
    .then(anotherfunc2)
    .then(function (data) {
       console.log(data);
       // outputs data
       return data;
    });
}

function caller() {
  var initValue = 0;
  initValue = func1(string1,string2);
  console.log('init value = '+initValue);
  //init value = undefined
}

2 个答案:

答案 0 :(得分:3)

在javascript中编写异步代码是有毒,这意味着所有调用异步代码的代码本身都必须是异步代码。

您的代码可以重写为:

function func1(string1, string2) {
    return Q.fcall(othermodule.otherfunc1, string1)
        .then(function(outputstring1) {
            var params = othermodule.otherfunc2(outputstring1, string2);
            return params;
        })
        .then(anotherfunc)
        .then(anotherfunc2)
        .then(function(data) {
            console.log(data);
            return data;
        });
}

function caller() {
    return func1(string1, string2).then(function(initValue) {
        console.log('init value = ' + initValue);
    });
}

答案 1 :(得分:1)

在func1中返回承诺

并在调用者中使用.then来获取“返回”值

function func1(string1, string2) {
    return othermodule.otherfunc1(string1)
        .then(function(outputstring1) {
            var params = othermodule.otherfunc2(outputstring1, string2);
            return params;
        })
        .then(anotherfunc)
        .then(anotherfunc2)
        .then(function(data) {
            console.log(data);
            return data;
        });
}

function caller() {
    func1(string1, string2).then(function(initValue) {
        console.log('init value = ' + initValue);
    });
}