您好在将此问题标记为重复之前请阅读,我找不到我个人对我的具体问题了解的示例。
这是一个伪代码函数:
foo(a1,a2,a3){
//do some logic here
return data
//lets say the data = 15
}
foo2(){
//do some stuff
data = foo(a1,a2,a3)
console.log(data)
}
正如您可能知道的那样,打印的数据未定义,而不是我想要的15。 有人可以请给我一个这个场景的例子。我一直试图理解这几个小时。我不需要冗长的解释。
答案 0 :(得分:0)
这对我有用:
foo = function(a1,a2,a3) {
//do some logic here
var data = a1 + a2 + a3;
return data;
//lets say the data = 15
}
foo2 = function() {
//do some stuff
var data2 = foo(5,5,5);
console.log(data2);
return data2
}
foo2();
它将15记录到控制台,并返回15 ...
由于您的伪代码有点模糊,没有人确切知道您遇到了什么问题,但我认为您将从阅读有关此处的悬挂中受益 - https://www.interviewcake.com/question/python/js-scope。我不打算从网站上复制粘贴答案,因为它的格式要好得多。 :)
答案 1 :(得分:0)
让我们首先重写你的伪代码,以反映第一个函数中包含的逻辑的异步性质:
foo(a1,a2,a3){
//do some *async* logic here
regressionFunction(a1, a2, a3, function(result) {
data = result;
});
return data;
//lets say the data = 15
}
foo2(){
//do some stuff
data = foo(a1,a2,a3)
console.log(data)
}
这会导致data
undefined
foo2
data
,因为foo
返回时尚未设置Promise
。因此,异步。
有几种方法可以解决这个问题,但最简单的方法是使用Promise
。将data
视为保证未来值的占位符,然后我们可以指示我们的代码在继续之前等待。
不是简单地在foo
中返回Promise
,而是在data
准备就绪时返回foo = function(a1,a2,a3) {
return new Promise(function(resolve, reject) {
regressionFunction(a1, a2, a3, function(result) {
resolve(result);
});
});
}
来解决:
foo
然后我们使用foo2
实例的Promise
方法,而不是期望then
中foo2 = function() {
//do some stuff
var data2 = foo(5,5,5);
data2.then(function(result) {
console.log('Finally got a result!', result);
});
}
的结果立即可用。
foo2
如果你需要根据foo
的结果从.then
返回一个值,当然,你也需要在那里返回一个Promise。方便的是,Promise
方法的返回类型本身就是foo2 = function() {
//do some stuff
var data2 = foo(5,5,5);
return data2.then(function(result) {
console.log('Any function receiving this as input can access the result now by accessing the `.then` method of this function');
return result;
});
}
,所以我们可以简单地返回它:
Maximum UPDATE/DELETE statements per day per table: 48
Maximum UPDATE/DELETE statements per day per project: 500
Maximum INSERT statements per day per table: 1,000
Maximum INSERT statements per day per project: 10,000
这是Promises的简化,但应该让你开始。