function a() {
var data;
b();b();//多次执行
var b = function () {
if (flag == true) {
/*......很多执行后*/
data = 3333333333333;
}
};
return data;
}
我要在另一个方法中调用方法a,以获取返回值data,请问怎么写。
data=333333333333是很多操作后的结果,显然
调用var a = a();return a//undefined
两个问题
第1个,在 a() {}
中,先执行 b
再给 b
赋值,会抛 TypeError: b is not a function
。
第2个,var a = a()
已经把 a 重写了,第一次执行是没有什么问题,如果还有其它地方执行 a()
就会出问题了。
然后看你的逻辑,如果你的 b()
不是异步执行的,而且保证 flag 至少有一次为 true,那 a()
的返回就不可能是 undefined
。如果你确实得到了 undefined
,可以检查一下是不是 flag 没有为 true 的时候,或者 b()
里面有异步代码(比如 ajax)。如果是因为 b()
里面有异步代码,那就要考虑用 Promise
或者类似的库来实现
总之,我觉得这段代码是你为了问问题临时精简出来的,不能发现原来真实的问题是哪里引起的。
你把a中b的执行放在b的赋值之后,再确保flag == true为真就可以了。
function a() {
return new Promise(function (resolve, reject) {
var data
var b = function () {
data = 3333333333333
setTimeout(() => { resolve(data) }, 1000 * 3)
}
b()
})
}
a().then(function (data) {
console.log(data)
})
function a() {
var data;
var b = function () {
if (flag) {
/*......很多执行后*/
data = 3333333333333;
}
return data;
};
return b();
}
在a函数里面执行一下b函数就好啦,然后再返回data