嗨,我很高兴在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
}
答案 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);
});
}