从回调中返回数据

时间:2016-10-04 10:32:02

标签: javascript node.js promise

    var myVar;    
    myModule.myFunction().then(function(data){
       myVar = data;     
    });
    console.log(myVar);

我有一个名为myModule的模块,它导出一个带有一些承诺的函数myFunction。现在,当我将数据分配到myVar并打印时,它会显示undefined。实现这一结果的正确解决方案是什么?

3 个答案:

答案 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);  
});