Как обработать обещание, возвращенное из родительской цепочки обещаний, с различными возможными результатами

1

В моем веб-приложении Node.JS у меня есть модуль уровня базы данных (db_location.js). В зависимости от типа ответа от вызова "выбор узла" он возвращает обещание json() или text() в зависимости от типа контента от ответа на вызов извлечения.

const querystring = require('querystring');
const fetch = require('node-fetch');

const p_conf = require('../parse_config');

const db_location = {
    getLocations: function() {
        return fetch('${p_conf.SERVER_URL}/parse' + '/classes/GCUR_LOCATION', { method: 'GET', headers: {
            'X-Parse-Application-Id': 'APPLICATION_ID',
            'X-Parse-REST-API-Key': 'restAPIKey'
        }}).then(function(res1) {           
            const contentType = res1.headers.get('content-type').toLowerCase();
            if (contentType.includes("application/json"))
                return res1.json();  // RETURNS A PROMISE
            else
                return res1.text();  // RETURNS A PROMISE
        }).catch(err => Promise.reject(JSON.stringify({ "Error": err })));
    }

};

module.exports = db_location

Модуль вызывается экспресс-маршрутом locations.js.

const db_location = require('../db/db_location');
router.get('/', function(req, res, next) {
    db_location.getLocations()
    .then(function(result) {
        /*
        IF RESULT IS JSON, DO PROCESSING 1;
        ELSE RESULT IS TEXT, DO PROCESSING 2.
        */
    })
    .catch((err) => {
        return next(err);
    })

});

Поскольку ответ из выборки не может быть передан по цепочке обещаний, нет способа извлечь тип контента из кода маршрута.

  • 0
    код для текста ... json - это просто текст в любом случае, так что вы всегда можете JSON.parse для любого текста - о, вы уже это сделали - так в чем же проблема? в теле .then(function(result) { проверить, является ли result объектом или строкой - просто
  • 0
    чтобы уточнить ваши комментарии в вашем коде ... return res1.json(); // RETURNS A PROMISE THAT RESOLVES TO AN OBJECT return res1.text(); // RETURNS A PROMISE THAT RESOLVES TO A STRING return res1.json(); // RETURNS A PROMISE THAT RESOLVES TO AN OBJECT и return res1.text(); // RETURNS A PROMISE THAT RESOLVES TO A STRING
Теги:
promise

1 ответ

0

Ну Javascript строки являются действительными данными Json. Поэтому теоретически вы не можете сказать, было ли что-то Json или нет, если вы не res1.json() его после res1.json()

Вы можете проверить, есть ли что-то типа string со следующим в location.js

if(typeof result === 'string'){ /* it a string*/ }
else{ /* it something else */}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню