Pomyśl o tym, jak Rails, np. pozwala zdefiniować jako właściwość związaną z innego:Jak zrobić asynchronizatory i setery JavaScript?
class Customer < ActiveRecord::Base
has_many :orders
end
nie utworzenia kolumny bazy danych dla orders
. Zamiast tego tworzy getter dla orders
, która pozwala nam robić
@orders = @customer.orders
który jedzie i dostaje powiązanych orders
obiektów.
W JS, możemy łatwo zrobić z pobierające:
{
name: "John",
get orders() {
// get the order stuff here
}
}
Ale szyn jest sync oraz w JS, jeśli w naszym przykładzie jest to uzasadnione, jedziemy do bazy danych, my będzie to robić async.
Jak moglibyśmy stworzyć asynchroniczne obiekty pobierające (i setery)?
Czy zwrócimy obietnicę, która ostatecznie zostanie rozwiązana?
{
name: "John",
get orders() {
// create a promise
// pseudo-code for db and promise...
db.find("orders",{customer:"John"},function(err,data) {
promise.resolve(data);
});
return promise;
}
}
który pozwoli nam zrobić
customer.orders.then(....);
Albo zrobimy to bardziej kanciasty styl, w którym będziemy automatycznie rozwiązać go na wartości?
Podsumowując, w jaki sposób zaimplementować moduły pobierające asynchroniczne?
Nie mogę wymyślić innego sposobu niż zwrot obietnicy. –
Generatory z 'yield' może? – elclanrs
@elclanrs: AFAIK a getter nie może być generatorem. –