Javascript 图像对象只能记录到控制台

Javascript 图像对象只能记录到控制台,javascript,ecmascript-6,cloudinary,Javascript,Ecmascript 6,Cloudinary,我试图将image对象存储在构造函数变量中,但它没有定义,目前我只能将对象记录到结果中 我试图从类方法getUserImage()获取对象数据 但是当我尝试将对象存储在this.\u userImage中时,它显示未定义。同样,只有console.log(result)才起作用:( UsersController.js 'use strict' const Validator = require("../Helpers/ValidatorHelper.js"); const ImageUplo

我试图将image对象存储在构造函数变量中,但它没有定义,目前我只能将对象记录到结果中

我试图从类方法
getUserImage()获取对象数据
但是当我尝试将对象存储在
this.\u userImage
中时,它显示未定义。同样,只有
console.log(result)
才起作用:(

UsersController.js

'use strict'

const Validator = require("../Helpers/ValidatorHelper.js");
const ImageUploader = require("../Helpers/ImageUploader.js");

class UsersController {

  * registerView (request, response) {
    yield response.sendView('users.register');
  }

  * register (request, response) {
    const user = request.only('display_name', 'username', 'email', 'password', 'confirm_password', 'console');
    const avatar = request.file('avatar');


    let validator = new Validator(user, avatar);
    let imageUpload = new ImageUploader(avatar);

    let avatarStatus = yield validator.validateAvatar();
    if (avatarStatus) { // is true
      yield imageUpload.uploadAvatar(avatar.file.path);
      console.log(imageUpload.getUserImage());
    } else { // is false
      // pick a random avatar
    }

    return response.status(200).json(user);

  }


}

module.exports = UsersController

您的回调正在更改此
所指的范围:

* uploadAvatar(path) {
    cloudinary.uploader.upload(path, function(result) {
      // "this" is now referring to your callback function
      this._userImage.imgData = result;
      return console.log(this._userImage);
    });
  }
最好使用箭头函数(保留父作用域)修复此问题:

或者在进入回调之前捕获此:

 * uploadAvatar(path) {
    const _this = this;
    cloudinary.uploader.upload(path, function(result) {
      _this._userImage.imgData = result;
      return console.log(_this._userImage);
    });
  }

您的回调正在更改此所指的范围:

* uploadAvatar(path) {
    cloudinary.uploader.upload(path, function(result) {
      // "this" is now referring to your callback function
      this._userImage.imgData = result;
      return console.log(this._userImage);
    });
  }
最好使用箭头函数(保留父作用域)修复此问题:

或者在进入回调之前捕获此:

 * uploadAvatar(path) {
    const _this = this;
    cloudinary.uploader.upload(path, function(result) {
      _this._userImage.imgData = result;
      return console.log(_this._userImage);
    });
  }

你在
*uploadAvatar
中的回调中的
这个
不是你认为的
这个
函数(结果)改成
(结果)=>
你在
*uploadAvatar
中的回调中的
这个
不是你认为的
这个
函数(结果)
改成
(结果)=>
哦,好的,谢谢你的格式,Rob!我会给你一个机会。我从来不知道这一点,谢谢你!!没问题,很乐意帮忙:-)嘿,Rob,我的getUserImage()仍然返回一个空对象…这是范围的原因吗?这更可能是因为
getUserImage()
是异步的。你的
console.log(this.\u userImage)
在您的
控制台.log(imageUpload.getUserImage())
之前或之后被调用?我在
uploadAvatar()中添加了一个回调。
。现在效果很好!哦,好吧,也谢谢你的格式Rob!我会给这些一个机会。我从来都不知道,谢谢你!!没问题,很高兴能帮上忙:-)嘿Rob,我的getUserImage()仍然返回空对象…这是作用域的原因吗?这更可能是因为
getUserImage()
是异步的。您的
console.log(this.\u userImage)
是在
console.log(imageUpload.getUserImage())
之前还是之后被调用的?我在
uploadAvatar()中添加了一个回调
。现在很有魅力!
 * uploadAvatar(path) {
    const _this = this;
    cloudinary.uploader.upload(path, function(result) {
      _this._userImage.imgData = result;
      return console.log(_this._userImage);
    });
  }