var myVar;
myModule.myFunction().then(function(data){
myVar = data;
});
console.log(myVar);
我有一个名为myModule
的模块,它导出一个带有一些承诺的函数myFunction
。现在,当我将数据分配到myVar
并打印时,它会显示undefined
。实现这一结果的正确解决方案是什么?
答案 0 :(得分:1)
你可能不得不重新考虑你的结构,但要实现你所要求的是将console.log
置于承诺之内。
var myVar;
myModule.myFunction().then(function(data){
myVar = data;
console.log(myVar);
});
答案 1 :(得分:1)
您发布的代码不是同步的,因此它正常运行。
这是您的代码流程,可让您更好地了解代码实际执行的操作。
// myVar is declared undefined
var myVar;
// you call console.log with undefined
console.log(myVar);
// sometime later .then is called
myModule.myFunction().then(function(data){
// later you set the global variable to the data
myVar = data;
// at this point you can log the value of myVar
});
在从ajax调用中返回某些内容时,您无法同步执行此操作,但在返回后可以链接另一个.then
。
myModule.myFunction().then(function(data){
// do something with the data
return data;
})
.then(function(data){
// do something else with the data
})
您可以根据需要继续链接then
,并且可以使用更多有用的方法进行错误处理,或者并行或同步调用promises
答案 2 :(得分:0)
由于then
是异步的,console.log
将在then
之前调用,所以在日志时,它是undefined
。
这将为您提供您所追求的结果:
var myVar;
myModule.myFunction().then(function(data){
myVar = data;
console.log(myVar);
});