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