Как присвоить значение с помощью ES2016 async и nodejs - PullRequest
0 голосов
/ 01 мая 2018

Я пишу с помощью node.js и выражаю желание создать API, когда пользователь вводит URL-адрес в свою адресную строку, он отправляет xmlhttpreq на другой сайт и отправляет значение. Теперь эта часть работает нормально, но я хочу использовать эту же информацию для дальнейшего программирования. Таким образом, код должен ждать результата и присваивать его переменной. Так что я пробую ждать и асинхронно. Ниже мой код.

app.get('/super', function(req, res){
res.send(console.log(config.options()));
 // config is imported this where the async code is
});

config.js

module.exports = {
    options : async () =>{
                let super  = await getGas();
                return super
            },
}
var getGas = async ()=>{
provider = ether.providers.getDefaultProvider();
provider.getGasPrice().then(//provider.getGas is a promise
    function(gasPrice) {
        gasPriceString = gasPrice.toString();
        return gasPriceString;
    },
    function(error){
        var errorObj = JSON.parse(error.responseText);
    }
);
}

Что я делаю не так?

1 Ответ

0 голосов
/ 01 мая 2018

Если вы хотите использовать async / await, вы используете его для замены then:

module.exports = {
    options: getGas,
};
async function getGas() {
    const provider = ether.providers.getDefaultProvider();
    try {
        const gasPrice = await provider.getGasPrice(); //provider.getGas() is a promise
//                       ^^^^
        const gasPriceString = gasPrice.toString();
        return gasPriceString;
    } catch(error) {
        var errorObj = JSON.parse(error.responseText);
        throw errorObj; // what else would you do with it here?
    }
}

И, конечно, все это все еще асинхронно, поэтому вы должны учитывать это при вызове функции options:

app.get('/super', async function(req, res){
    try {
        res.send(await config.options());
//               ^^^^^
    } catch(e) {
        // TODO: error handling
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...