如何在回调函数中赋值?

时间:2013-05-02 19:09:43

标签: javascript

我遇到了callback功能

的问题
project.prototype.getFolder = function(path){

    this.imagePath;
    var instance = this;

    function getImage(image, callback) {
       var it = function(i){
         codes.....
         //I am sure variable image is not null
                  callback(image);

         codes....
        }
    }

   // function to get the image
   getImage(image, function (img) {
        instance.imagePath = img;
   });

   //it outputs undefined...
   console.log(this.imagePath )

}

我想在this.imagePath函数中将值赋给callback,但我的情况似乎是undefined。 我确信我传递了有效的image变量,但我仍然没有得到任何结果。任何人都可以提供小费吗?非常感谢!

2 个答案:

答案 0 :(得分:5)

您的代码可能是异步的,因此回调函数需要一段时间才能运行。在这段时间内,虽然您的返回值仍未设置,但您正在尝试打印变量。

基本上即使代码本身是在回调之后编写的,它也可以在它之前运行。

这可能是您的问题,因此您应该尝试仅在调用回调后访问此值:

   // function to get the image
   getImage(image, function (img) {
        instance.imagePath = img;
        console.log(instance.imagePath);
   });

修改

为了将异步参数作为getFolder的返回值返回,您应该将回调函数传递给getFolder;

示例:

project.prototype.getFolder = function(path, callback){
    ...
    ...
    if (typeof(callback) == "function"){
        callback(this.imagePath);
    }
}

用法:

project.getFolder(path,function(imagePath){
    console.log(imagePath);
});

答案 1 :(得分:0)

您指定了imagePath,但尝试访问validImagePath。试试:

 console.log(this.imagePath)

我不明白你为什么一开始就有this.imagePath;。可能你想写:

this.imagePath = path;