如何在构造函数中让Callback优雅一些?
发布于 9 年前 作者 louis-sherren 4132 次浏览 最后一次编辑是 8 年前 来自 问答

我尝试使用Promise,但是发现构造函数中是不能这么做的,因为构造函数是通过new调用的,返回的是对象 而Promise是要求返回一个Promise对象的,有什么好办法可以在构造函数中比较好的调用callback呢?

9 回复

楼主举个例子行吗? 我也想知道。

@think2011 此人对js的oo理解的不见得太好

楼主的想法很独特,我从来没有想过在构造函数里面使用异步,我也没有使用过构造函数。。。

我觉得你可以不使用new,用Object.create来创建对象,或者直接指定对象的__proto__

@think2011

var Person = function(name, callback) {
    this.name = name;
	callback(args);
}

var person = new Person('xx', retrieveDataFromDatabase);

function retrieveDataFromDatabase() {
   //...
}

类似这种的

类似这种

@i5ting 嗯,JS的oo确实理解得不深入,求教。

@waksana 没使用过构造函数?

var A = function() {
   //this is the constructor
}
var a = new A();

JS里这不叫构造函数吗?

var util = require('util');
var events = require("events");

// 定义时
var User = function (options) {
  var self = this;

  events.EventEmitter.call(this);

  self.name = options.name;
  self.age = options.age;

  // do some async operation
  setImmediate(function () {
    self.emit('ready');
  })
};

util.inherits(User, events.EventEmitter);

// 使用时

var alsotang = new User({name: 'alsotang', age: 3});
alsotang.on('ready', function () {
  // do what you want
  console.log('I am ready')
})

@louis-sherren 我的意思是我不用new这种方式来构造一个对象,因为没有什么必要。

你的问题让我又找到了一个不用new的理由,就是不支持异步。

var Persion = function(name, callback) {
  var newPerson = {name: name};
  httpRequest(function(age) {
    newPerson.age = age;
	callback(newPerson);
  });
}
Person('xxx', functon(person) {
  //这样岂不是很好
});

果断马克一下

回到顶部