Используя обещание отправить http запрос после storage.get - PullRequest
0 голосов
/ 18 апреля 2019

Я запускаю приложение в Ionic3 и пытаюсь отправить информацию об устройстве через http-запрос в мой API, чтобы я мог сохранить его в таблице в моей базе данных SQL.

По-видимому, задачи выполняются асинхронно, а метод SEND перебирает метод storage.get (который получает информацию из ионного хранилища), поэтому он передается как ноль или пусто

Я перечитал некоторые сообщения в Интернете и попытался встроить этот запрос в обещания, но при тестировании он возвращает мне следующую ошибку: «не удается прочитать свойство 'webservice' из неопределенного"

вот мой код:

           public sendDeviceInfo(company: string, worker: string)
{
    this.storage.get(StorageEnum.PUSH_NOTIFICATIONS_PLAYERID).then(playerId => {

        const getDeviceInfo = new Promise((resolve, reject) => {
        if(playerId != null && playerId != '' && typeof playerId != 'undefined') {

            let param = {
                company : company,
                worker  : worker,
                device  : {                    
                    uuid          : playerId
                    ,model        : this.device.model
                    ,manufacturer : this.device.manufacturer
                    ,platform     : this.device.platform
                    ,version      : this.device.version
                }
            };
            resolve(param)                
        } else {
            const err = new Error('Algo deu errado');
            reject(err)
        }
    })

       const sendData = function(param) {

        let deviceInfoObject = this.webservice.saveDeviceInfo(JSON.stringify(param)).subscribe(response => {
            alert(JSON.stringify(response));

            this.storage.set(StorageEnum.DEVICE_INFO, param); 
            }, err => {                    

                alert(JSON.stringify(err));
            })
            return Promise.resolve(deviceInfoObject)
        }

        const deviceInfo = function() {
            getDeviceInfo.then(sendData)
            .then(function(fulfilled) {
                alert(JSON.stringify(fulfilled))
            })
            .catch(err => alert(err.message))
        }

        deviceInfo();
    });
}

Я хочу отправить информацию об устройстве ТОЛЬКО после того, как выполнено storage.get, должен ли я использовать Promise? Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Вы также можете попробовать этот подход с правильной обработкой ошибок и чистым потоком ...

public sendDeviceInfo(company: string, worker: string){
    this.storage.get(StorageEnum.PUSH_NOTIFICATIONS_PLAYERID)
    .then((playerId)=>{
        if(playerId == null || playerId == '' || typeof playerId == 'undefined') {
            throw new Error("Algo deu errado");
        }
        let param = {
            company : company,
            worker  : worker,
            device  : {                    
                uuid          : playerId
                ,model        : this.device.model
                ,manufacturer : this.device.manufacturer
                ,platform     : this.device.platform
                ,version      : this.device.version
            }
        }            
        return param
    })
    .then((param)=>{
        return new Promise((resolve, reject) => {
            this.webservice.saveDeviceInfo(JSON.stringify(param))
            .subscribe((response)=>{
                console.log(response);
                resolve(param)
            },
            (err)=>{
                reject(err)
            })                
          });
    })
    .then((param)=>{
        return this.storage.set(StorageEnum.DEVICE_INFO, param)
    })
    .catch((error)=>{
        console.log('error', error)
    })
}
this.sendDeviceInfo('company', 'worker')

Вот и все!

0 голосов
/ 18 апреля 2019

После некоторых тестов и исследований я нашел решение:

    public sendDeviceInfo(company: string, worker: string)
{
    this.storage.get(StorageEnum.PUSH_NOTIFICATIONS_PLAYERID).then(playerId => {

    let getDeviceInfo = new Promise((resolve, reject) => {

        if(playerId != null && playerId != '' && typeof playerId != 'undefined') {

            let param = {
                company : company,
                worker  : worker,
                device  : {                    
                    uuid          : playerId
                    ,model        : this.device.model
                    ,manufacturer : this.device.manufacturer
                    ,platform     : this.device.platform
                    ,version      : this.device.version
                }
            };
            resolve(param)

        } else {
            const err = new Error('Algo deu errado');
            reject(err)
        }
        }).then((param) => {
            this.webservice.saveDeviceInfo(JSON.stringify(param)).subscribe(response => {

                this.storage.set(StorageEnum.DEVICE_INFO, param); 
                }, err => {                    

                })
            }
        )
    });
}

это окончательный код, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...