Zauważyłem dziwne zachowanie z moimi komponentami za pomocą Angular 2. Moje widoki zajmują kilka sekund, aby zostać zaktualizowane, gdy mój składnik zmieni model jako moich dostawców. Nawet jeśli dane z API to pojedyncze dane.Opóźnienie Angular2 do aktualizacji
Na przykład:
mam jak mój Provider model o nazwie UserModel Wewnątrz mój komponent uzyskać dane z API, a następnie aktualizować ten model, który jest również wewnątrz mojego widoku. Po otrzymaniu odpowiedzi od serwera aktualizowanie mojego widoku trwa kilka sekund, a czasami nie jest aktualizowana, zaraz po kliknięciu dowolnego kontrolera tekstu na tej samej stronie, a następnie mój widok jest aktualizowany po ustawieniu dowolnego tekstu.
Czy ktoś już to widział? Co mogłem robić źle?
Komponent Karta
public createCard(model:CardModel):Promise<any>{
var context = this;
return new Promise((resolve, reject) => {
this.stripe.createToken(model)
.then(function(token){
model.token = token;
context.saveCard("./card", model, true)
.then(data => resolve(data))
.catch(error => reject(error));
})
.catch(error => reject(error));
});
Stripe usługi
public createToken(model:CardModel):Promise<any>{
//I get callback and convert return it as promise
return new Promise((resolve, reject) => {
//this function is the one from stripe.js, it is not promise
this.stripe.card.createToken(model, function(status, response){
if(status == 200){
resolve(response.id);
}else{
reject(response.error.message);
}
});
});
}
Jeśli zauważysz funkcję createToken powraca jako zwrotnego, ponieważ jest to funkcja Strip.js, a następnie przekonwertować go do Obiecaj go zwrócić utworzyć CreateCard. Ale gdy wszystkie funkcje zostaną zakończone, moja strefa nie zostanie zmieniona. Jeśli usuniemy this.stripe.card.createToken i zwrócę proste rozstrzygnięcie() przy użyciu limitu czasu, to działa poprawnie. Tak więc uważam, że problem polega na tym, że funkcja asynchroniczna zwraca komunikat zwrotny wewnątrz obietnicy. Ale nie mam pojęcia, jak sobie z tym poradzić.
Jest to zwykle, gdy jakiś kod, który działa poza Angulars strefie aktualizuje dane Niektóre API z wywołań zwrotnych, które nie są. łatany przez strefę Angulars może to spowodować.W tym przypadku Angular nie wie, że musi uruchomić detekcję zmian.Muszę zobaczyć jakiś kod –
Zaktualizowałem pytanie, dodając trochę kodu – Angular2
'Obietnica' może zależeć od niektórych polyfill kolejność ładowania Jeśli użyjesz Observable, to zdecydowanie powinno zadziałać, poza tym nic nie ma podejrzliwy. –