我一直在努力兑现承诺。不管我读过多少个这个问题,我都无法解决。
我有一个具有已部署(布尔)属性的实验室类/函数。我想检查实验室是否已部署。我已经有一个实验室对象,因此我将其称为lab.isDeployed()。但是,当返回-返回true或false时,由于此异步“功能”,我不再可以访问原始实验室对象。
function lab(id) {
this.deployed = null; //This is the property.
this.isDeployed = function(){
return isLabDeployed(this.id, this.userID).then(function(data){
return data; //Where Data is a query to determine if its deployed.
});
}
这是从另一种方法调用的。
l.isDeployed().then(function(data){
expect(data).to.be.equal(false);;
});
我应该将实验室对象传递回原始方法吗? IE而不是返回上面的数据,我应该更新部署的属性并将其返回吗?还是有另一种方法?我试图限制代码,因为我希望得到解释。
答案 0 :(得分:1)
尝试做这样的事情:
this.isDeployed() = function() {
return new Promise(
(resolve, reject) => {
isLabDeployed(this.id, this.userID)
.then((data) => {
resolve(data);
});
}
);
然后,您可以将isDeployed函数作为promise进行调用。
this.isDeployed()
.then((data) => {
// this is where you use your data.
});
否则,您可能要使用async / await
const data = await this.isDeployed()
基本上,您想解决获得的数据。您甚至可以做一些简单的事情。
this.isDeployed() = isLabDeployed(this.id, this.userId)
答案 1 :(得分:1)
您仍然可以访问l
对象
l.isDeployed().then(function(data){
expect(data).to.be.equal(false);
console.log(l.deployed) // lab object still accessible here
});
或使用async / await:
const data = await l.isDeployed()
console.log(l.deployed) // lab object still accessible here