未捕获的TypeError:无法设置属性' rowsdata'未定义的

时间:2016-07-06 05:24:47

标签: node.js asynchronous typescript angular electron

我在使用节点js的角度2处理时遇到困难。下面是我的代码。它无法将行(变量)设置为this.rowsdata(变量)。 我认为背后的原因是节点Js使用异步调用。可能就是为什么this.rows数据未定义行的原因。

/// <reference path="../typings/node/node.d.ts" />
import { Component } from 'angular2/core';
import { OnInit } from 'angular2/core';

declare var module : any;
declare var jQuery : any;
var rowsdata : any[] = [];
// self = this;
interface ROWS {
name : string,
current_balance : number
}

@Component({
selector : 'portfolioList',
templateUrl : '../app/view/portfoliolist.html',
moduleId : module.id
})

export class PortfolioList implements OnInit {
 // self : any = this;

constructor() {
 // var self : this;
}

ngOnInit(): any {
 this.showdata();
 // console.log(this.rowsdata);
}

showdata() {
 console.log("called");
 var portfolioList = require('../app/api/showPortfolio.js');
 portfolioList.showPortfolio(function(err:any, rows:any) {
   console.log(rows);
   // self.rowsdata = rows;
   this.rowsdata = rows;
 });

 // console.log(self.rowsdata);

 console.log(rowsdata);
 }
}

这是showPortfolio函数

    exports.showPortfolio = function(callback) { 
db.all(squel .select() 
.from("portfolios") 
.field("name") 
.field("current_balance") .toString() , function(err, rows) {      callback(null, rows) }); 
}

2 个答案:

答案 0 :(得分:2)

在您的代码中:

portfolioList.showPortfolio((err:any, rows:any) => {

将其改为胖箭头:

{{1}}

更多

https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html

答案 1 :(得分:0)

我无法发布所有这些代码的评论,所以我发布了一个答案。 它应该像这样工作。我已经添加了一些额外的日志。

showdata() {
 console.log("called");
 var _this = this;
 console.log(_this);
 var portfolioList = require('../app/api/showPortfolio.js');
 portfolioList.showPortfolio(function(err:any, rows:any) {
   console.log(rows);
   console.log(_this);
   _this.rowsdata = rows;
 });

 // console.log(self.rowsdata);

 console.log(rowsdata);
 }
}