NodeJS-使用返回的Promise更新对象

时间:2018-11-09 03:09:03

标签: javascript node.js asynchronous

我一直在努力兑现承诺。不管我读过多少个这个问题,我都无法解决。

我有一个具有已部署(布尔)属性的实验室类/函数。我想检查实验室是否已部署。我已经有一个实验室对象,因此我将其称为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而不是返回上面的数据,我应该更新部署的属性并将其返回吗?还是有另一种方法?我试图限制代码,因为我希望得到解释。

2 个答案:

答案 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