NodeJS - обновить объект с возвращенным обещанием - PullRequest
0 голосов
/ 09 ноября 2018

Я боролся с обещаниями. Неважно, сколько формулировок этого вопроса я прочитал, я не могу разобраться.

У меня есть лабораторный класс / функция, которая имеет свойство развернутого (булево). Я хочу проверить, развернута ли лаборатория. У меня уже есть лабораторный объект, поэтому я вызываю lab.isDeployed (). Однако, когда это возвращает - он возвращает истину или ложь, однако я больше не могу получить доступ к исходному лабораторному объекту из-за этой асинхронной «функции».

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 голосов
/ 09 ноября 2018

Вы по-прежнему сможете получить доступ к l объекту

l.isDeployed().then(function(data){
    expect(data).to.be.equal(false);
    console.log(l.deployed) // lab object still accessible here
});

Или с помощью асинхронного / await:

const data = await l.isDeployed()
console.log(l.deployed) // lab object still accessible here
0 голосов
/ 09 ноября 2018

Попробуйте сделать что-то вроде этого:

this.isDeployed() = function() {
    return new Promise(
        (resolve, reject) => {
            isLabDeployed(this.id, this.userID)
                .then((data) => {
                    resolve(data);
                });
        }
    );

Затем вы можете вызвать функцию isDeployed в качестве обещания.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...