在我的angular2
应用程序中,我有一个可能需要很长时间的方法,因此我使用promise
异步执行它。
我希望计算在后台,因此GUI将继续照常工作,但似乎我的GUI等待计算完成。
服务中的方法'func' -
return new Promise((resolve,reject) => {
console.log("2");
//some long process in database
console.log("3");
if(result!=null){
resolve(result);
}
else{
reject("Failure");
}
});
我在组件中使用此方法 -
this.service.func().then(data => {
console.log("4");
});
console.log("done");
当前输出 -
2
3
做过
4个
期望的输出 -
做过
2
3
4个
promise
在后台执行长任务?
答案 0 :(得分:0)
Promise的内容本身并不是异步,承诺将确保如果有像http请求那样的异步调用,只要使用某些数据调用resolve,它就会调用then回调函数。 但如果你只是运行一个console.log它会同步运行。 尝试运行此代码以获得您期望的结果:
return new Promise((resolve, reject) => {
setTimeout(function() {
console.log("2");
console.log("3");
resolve();
}, 0);
});
答案 1 :(得分:0)
您缺少的是您的承诺中没有长期运行的任务,如Web服务调用。所以,你的Promise会立即解决,这就是为什么你看到控制台按顺序登录的原因。
如果您想查看所需的行为,请使用此类setTimeout
在Promise中模拟长时间运行的任务。
return new Promise((resolve,reject) => {
// Simulate long running process with 2 second delay
setTimeout(function () {
console.log("2");
console.log("3");
resolve();
}, 2000);
});