angular2中的Observable或Promise

时间:2016-10-18 08:23:11

标签: angular observable

此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')
  );

2 个答案:

答案 0 :(得分:1)

当回复到达时

<e:Header>
    <me:RequestHead xmlns:me="http://www.my-namespace.org/header/abc" xmlns="http://www.my-namespace.org/header/abc" >
        <ID>0</ID>
        <Green>
            <a>101</a>
            <b>0</b>
        </Green>
        <Time>1</Tim>
    </me:RequestHead>
</e:Header>

已执行。

如果您希望在数据到达时执行其他或更多代码,请在data => { console.log("data is",data)}, 内添加此代码(代替{ }

这是异步执行的工作原理,没有别的办法。

答案 1 :(得分:0)

让我们说这是你的代码:

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')
  );