0

有没有人可以帮我解决这个问题,我定义了一个有函数的模块,这个函数返回一个对象。当我调用这个函数时,对象被接收,但是当我想访问对象的状态元素时,表示未定义。

这是我的模块:

import firebaseapp from "./firebase";
import store from "../store/index";
const database = firebaseapp.firebase.database();

export default {
  createProject(info) {
    var result = {};
    var userId = store.state.user.user.uid;
    info.created_at = firebaseapp.firebase.database.ServerValue.TIMESTAMP;
    info.status = "pendning";
    info.ower = userId;
    const project_ref = database.ref("/projects/" + userId + "/");
    project_ref
      .push()
      .set(info)
      .then(function() {
        result.status = "1";
        result.message = "successfully created";
      })
      .catch(function(error) {
        result.status = "0";
        result.message = error.message;
      });
    return result;
  }
};

这是我要调用的模块

export default {
data() {
    return {
      result: {},
      project: {
        ideal_expert: {}
      }
    };
  },
 gotCreateProject() {
      if (this.$refs.project_form.validate()) {
        this.dialog = true;
        this.result = create_project.createProject(this.project);
        console.log(this.result); //the whole object
        console.log(this.result.status);// the status property of object
      } else {
        this.dialog = false;
      }
      // console.log(this.dialog);
    }
  }
};

输出: 在此处输入图像描述

4

1 回答 1

0

您的代码几乎没有问题

  1. 看似不一致的日志 - 现代浏览器将对象记录为实时引用。您在控制台中看到的不是console.log执行时对象的值。看到这个(是的,再次)

也看看下面的小例子。打开浏览器的开发工具并执行代码片段。检查浏览器的控制台 - 两个日志都应显示空对象,但第一个显示具有a在日志记录操作后分配的属性的对象...

  1. 因为在您记录对象及其属性时,该对象肯定是空的。因为在createProject函数内部,您正在调用set(info)返回promise的异步函数。里面的一切都then将在未来的某个时候执行,但绝对是在之后return resultconsole.log

  2. 从日志 ( __ob__) 来看,您正在使用 Vue 2。向对象添加属性是 Vue 无法检测到的操作 - 请参阅更改检测警告。预先定义所有属性或Vue.set按照文档中的说明使用

let obj = {}

console.log("Log 1:", obj)
console.log("Log 2:", JSON.parse(JSON.stringify(obj)))

obj.a = 1

于 2021-04-03T07:43:42.367 回答