Javascript承诺及其参数

时间:2014-04-30 18:04:32

标签: javascript scope promise

在下面的.then结构中,我在将图像对象返回到下一个时遇到了问题。然后。

在我返回图像时,它不再可用,因为它超出了初始范围。

有没有正确的方法让它在那里可用,或者我在这里编码?

  .then(function(image) {        


    image.data().then(function(result) {
        var base64 = result.toString("base64");
        var largeImage = new Parse.File("l.jpg", { base64: base64 });
        largeImage.save().then(function(result,image) {
            post.set('largeImageUrl',result.url());
            return image;    /// <-- undefined. How can access the image object here?
        });
    });



  }).then(function(image) {

1 个答案:

答案 0 :(得分:4)

原始image变量不在范围之外;变量对同一块中定义的所有函数都是可见的,即使函数是在其他函数中定义的。也就是说,变量的作用域是它定义的函数。如果在各种函数中存在相同名称的变量,则内部作用域函数将具有该作用域的新引用,并且不再引用外部函数的值。

但是,原始image变量会被最内层范围内另一个名为image的变量遮挡,function(result,image)会传递给largeImage.save().then()。如果您仍然需要引用外部image变量,则应将内部image变量重命名为其他变量。

由于最里面的image变量是undefined,它看起来是复制+粘贴的剩余部分,甚至可能不属于function(result,image)的参数列表