最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - variable scope in asynchronous function - Stack Overflow

programmeradmin0浏览0评论

I've built the function to return some variable. But my function uses another function asynchronously.

function getVariable() {
  var myVariable;
  asyncronousFunction(function(...){

    myVariable = ...

  });
  return myVariable;
}

The problem is that myVariable outside of and inside in asyncronousFunction are different variables. So I can't assign value to myVariable from asynchronous function.

How to resolve this scope problem? Thanks.

I've built the function to return some variable. But my function uses another function asynchronously.

function getVariable() {
  var myVariable;
  asyncronousFunction(function(...){

    myVariable = ...

  });
  return myVariable;
}

The problem is that myVariable outside of and inside in asyncronousFunction are different variables. So I can't assign value to myVariable from asynchronous function.

How to resolve this scope problem? Thanks.

Share Improve this question asked Aug 26, 2011 at 14:30 megasmegas 21.8k12 gold badges82 silver badges134 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 5

They are the same variable, but you cannot return the result of an asynchronous function call synchronously from your getVariable function. The value of myVariable will be updated asynchronously at some unspecified later point in time. But your function is returning the value now. That doesn't work.

That means your getVariable function is asynchronous as well, which means you have to design it that way. For example it could accept a callback, just like asyncronousFunction does.

They are not different variables, it is the same variable... but you haven't assigned a value to myVariable before you return it at the end of the function.

The correct pattern here would be for getVariable and asychronousFunction to accept callbacks, which are executed when the asynchronousFunction has finished executing.

function getVariable(callback) {
  var myVariable;
  asyncronousFunction(function(/* pass callback as one of the parameters */){

    myVariable = ...

  });

  // Don't return myVariable, as it's useless at this point
};

function asyncronousFunction(callback) {
   // This simulates the asynchronous call. When the call finishes, invoke callback and pass the result as a parameter.
   setTimeout(function () {
        callback("result");
   }, 1000);
}

You should then edit how you use the function getVariable().

So where you might have had:

var value = getVariable();
// do whatever with value
value++;

You should now have:

getVariable(function (value) { // value is now passed as a parameter
    value++;
});
发布评论

评论列表(0)

  1. 暂无评论