离子 - 运行时错误:对象(...)不是一个函数

Posted

技术标签:

【中文标题】离子 - 运行时错误:对象(...)不是一个函数【英文标题】:Ionic - Runtime Error: Object(...) is not a function 【发布时间】:2018-12-05 22:15:46 【问题描述】:

我有这个非常基本的项目:

https://github.com/napolev/ionic-start

这基本上是Ionic 入门项目:

// https://ionicframework.com/getting-started
$ ionic start ionic-start tabs

我添加了以下两个文件:

/src/extras/social-media.ts

import * as Promise from 'bluebird';
import  User  from './user';

export var LoginPromise = function(service): Promise<string> 
    return new Promise((resolve) => 
        setTimeout(function()
            resolve('Will Smith');
        , 2000)
    );
;

//*/ IF I COMMENT THIS BLOCK OUT, THERE IS NO ERROR
// this function is not used by this project
// but for some specific reasons it is required to be here
// this code is a simplification of a bigger project
export var callMeIfYouNeedMe = function(id) 
    return new Promise((resolve) => 
        User.findById(id, function(err, user) 
            console.log(user);
            resolve(user);
        );
    );

// END OF BLOCK */

/src/extras/user.ts

import  Document, Schema, Model, model from "mongoose";

export interface IUser 
    name: string;

export interface IUserDocument extends IUser, Document 


export var UserSchema: Schema = new Schema(
    name: String,
);

export const User: Model<IUserDocument> = model<IUserDocument>("User", UserSchema);

上面的代码在节点项目上正常工作(我自己试过)。我是从:http://brianflove.com/2016/10/04/typescript-declaring-mongoose-schema-model/#schema--model 在最后一次导出中,我创建了一个类型为:IUserDocument

我还修改了以下两个文件:

/src/pages/home/home.ts

import  Component  from '@angular/core';
import  NavController  from 'ionic-angular';
import  LoginPromise  from '../../extras/social-media';

@Component(
  selector: 'page-home',
  templateUrl: 'home.html'
)
export class HomePage 

  constructor(public navCtrl: NavController) 

  

  test() 
    console.log('Hello World');
    LoginPromise('facebook').then(
      (name: string) => 
        console.log('### Social Media -> ' + name);
      
    );
  


/src/pages/home/home.html

<ion-header>
  <ion-navbar>
    <ion-title>Home</ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <h2>Welcome to Ionic!</h2>
  <p>
    This starter project comes with simple tabs-based layout for apps
    that are going to primarily use a Tabbed UI.
  </p>
  <p>
    Take a look at the <code>src/pages/</code> directory to add or change tabs,
    update any existing page or create new pages.
  </p>

  <button ion-button (click)="test()" color="primary">Test</button>

</ion-content>

我的问题是,当我跑步时:

$ ionic serve --no-open

我在控制台上没有收到任何错误,但在浏览器上我得到以下信息:

"Runtime Error: Object(...) is not a function"

如您所见:

您对这里可能发生的事情有任何想法吗?我该如何完成这项工作?

谢谢!

【问题讨论】:

你能解决这个问题吗? 【参考方案1】:

运行时错误:Object(…) 不是函数

您的电话:

model<IUserDocument>("User", UserSchema);

错了。 model 不是函数。它是一个对象。

修复

不要调用一个对象。代码错误。

【讨论】:

请阅读我刚刚在代码 sn-p 下方添加的黄色注释。我的代码来自:brianflove.com/2016/10/04/…,我在 Node 项目上成功尝试了该代码,没有任何问题。 另外,如果我在文件中将callMeIfYouNeedMe 块注释掉:/src/extras/social-media.ts,并保留该行:export const User: Model&lt;IUserDocument&gt; = model&lt;IUserDocument&gt;("User", UserSchema);,那么就没有错误。所以,我认为这条线不是问题。我刚刚在上面的代码中添加了该注释。

以上是关于离子 - 运行时错误:对象(...)不是一个函数的主要内容,如果未能解决你的问题,请参考以下文章

date.getTime 不是函数离子本地通知错误

无效数据,块必须是字符串或缓冲区,而不是对象 - 离子和火力

离子 3 中的“运行时错误区域已加载”

0x800a138f - JavaScript 运行时错误:属性“$”的值为 null 或未定义,不是函数对象

离子项目构建错误

错误:离子科尔多瓦运行 android --prod --release