JS Object с асинхронно установленным свойством

0

Я устанавливаю Person.name, используя функцию async (думаю, ajax-вызов). К сожалению, я все равно хотел бы использовать другие функции от объекта, не помещая их в обратный вызов.

Как использовать функции, зависящие от объекта асинхронно заданного свойства?

Код для выполнения:

var user = new Person();
user.setName(); // This is async.
var is_jennifer = user.isItJennifer(); // Oh no! the user name may not be defined yet!
...
...
var is_tom = user.isItTom(); // Much later in the code I need the async property again. I don't want to cram all of this into a callback whenever I setName.

Объект с методом setName() который является асинхронным.

function Person() {
  // Properties
  this.name = null;

  this.setName = function() {
    this.name = NameModelThing.getName(); // Oh no! getName returns a result asynchronously.
  }

  this.isItJennifer = function() {
    return (this.name == 'Jennifer') ? true : false;
  }

  this.isItTom = function() {
    return (this.name == 'Tom') ? true : false;
  }
}
  • 2
    Я думаю, что вы ищете "обещания" и "побежденные объекты" ...
  • 0
    Как NameModelThing.getName() ?
Показать ещё 1 комментарий
Теги:
callback
asynchronous
publish-subscribe

1 ответ

1
Лучший ответ

Если вы используете jquery для своих запросов ajax, вы можете сделать запрос несинхронным, передав async: false в качестве опции.

http://api.jquery.com/jQuery.ajax/

В качестве альтернативы вы можете использовать шаблон, в котором у вас есть какая-то инициализация для объекта Person при загрузке страницы и использование обратного вызова оттуда:

var user = new Person();
user.fetch({
  success: function() {
  // code when user ready here.
  }
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню