簡體   English   中英

angular2 中的 Observables 或 Promise

[英]Observables or Promise in angular2

這個 post 方法在 angular2 中使用。 在這個 ajax 調用中,post 方法不等待響應。 任何人都可以說如何使用 observable 在 javascript 中保持異步,直到收到響應。

this.http.post("http://jsonplaceholder.typicode.com/posts",body,options)
.map((res:Response) => res.json())
.subscribe(
    data => { console.log("data is",data)},
    err => console.error(err),
    () => console.log('done')
  );

當響應到達時

data => { console.log("data is",data)},

被執行。

如果您希望在 Data 到達時執行其他或更多代碼,請在{ }添加此代碼(代替或除了console.log(...)

這就是異步執行的工作原理,沒有其他方法。

假設這是您的代碼:

let myData = null;
this.http.post("http://jsonplaceholder.typicode.com/posts",body,options)
.map((res:Response) => res.json())
.subscribe(
    data => {
        myData = data;
        console.log("data is",data);
    },
    err => console.error(err),
    () => console.log('done')
  );

console.log("Log the data again", myData);

眾所周知,第二次日志記錄將記錄為 null,因為 Observable 可能尚未檢索到結果。 您應該做的只是將所有依賴於准備好的數據的代碼放在訂閱結果處理程序中,如下所示:

let myData = null;
this.http.post("http://jsonplaceholder.typicode.com/posts",body,options)
.map((res:Response) => res.json())
.subscribe(
    data => {
        myData = data;
        console.log("data is",data);
        console.log("Log the data again", myData);  // <--
    },
    err => console.error(err),
    () => console.log('done')
  );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM