Есть ли более разумный способ вызвать функцию, которая возвращает обещание, если эту функцию нужно вызывать около 250 раз? - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь отправить обратно JSON с указанием текущего времени на всех часовых поясах. У меня есть функция, которая возвращает обещание. Смысл этой функции - после вычисления смещения UT C часового пояса, чтобы преобразовать его в 24-часовой формат. Вот функция.

const timeCheck = (time) => {
return new Promise(function (resolve, reject) {
    if (time > 2399) {
        time -= 2400
    }
    else if (time < 0) {
        time += 2400
        console.log(time)
    }
    var a = time.toString()
    var b=a;
    if (a.length === 1) {
        b = "000" + a
    }
    else if (a.length === 2) {
        b = "00" + a
    }
    else if (a.length === 3) {
        b = "0" + a
    }
    time = b

    resolve(time)


})

}

Проблема в том, что существует около 250 различных часовых поясов (хранящихся в переменных), которые необходимо использовать при вызове функции 250 раз. Вот мое глупое решение.

timeCheck(EST).then((newEST) => {
        timeCheck(UST).then((newUST)=>{
            res.json({
                "UST": newUST,
                "EST":newEST
            })
        })
    })

Как видите, я вызываю функцию снова и снова, пропускаю разные часовые пояса в качестве параметра и использую цепочку обещаний. Это работает, но я не думаю, что это возможно повторить этот процесс 250 раз. Есть ли более разумный способ сделать это?

Я вызываю эту функцию внутри асинхронной функции.

app.get('/currently',  (req, res) => {
getUST().then( (result) => {...

Вот getUST, если это поможет:

const getUST = () => {
return new Promise(function (resolve, reject) {
    const url = "http://worldclockapi.com/api/json/utc/now"
    request({ url: url, json: true }, (error, response) => {
        if (error) {
            return
        }
        const time = response.body.currentDateTime

        const usableTime = time.substring(11, 16).replace(':', '')

        resolve(usableTime)
    })
})

}

1 Ответ

0 голосов
/ 02 мая 2020

Вот мой предложенный код:

const timeCheck = (time) => {
    if (time > 2399) {
        time -= 2400
    }
    else if (time < 0) {
        time += 2400
        console.log(time)
    }
    let a = time.toString()
    let b=a;
    if (a.length === 1) {
        b = "000" + a
    }
    else if (a.length === 2) {
        b = "00" + a
    }
    else if (a.length === 3) {
        b = "0" + a
    }
    time = b

    return time;  
}

И затем вы называете это так:

let t = timeCheck(EST);
res.json({ "UST": t });

Если есть какая-то причина (которую я не понимаю), чтобы назвать это функционировать несколько раз, вы можете просто передать результат одного вызова следующему вызову:

let t1 = timeCheck(EST);
let t2 = timeCheck(t1);
res.json({ "UST": t2 });

Если бы вы могли объяснить, что вы пытаетесь сделать, вызвав его несколько раз, и объяснить, что это за функция должен был сделать, тогда мы могли бы помочь вам исправить и эту часть.

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