0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 66
1

Возврат функции

14.04.2017, 04:46. Показов 1442. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток!
Пишу трейд-бота для стима( принимает вещи и отдает их в автоматическом режиме )
Все бы вроде хорошо, бот авторизуется в стиме, отправляет/принимает обмены, но вот столкнулся с проблемой когда начал писать функцию парсинга цен на вещи с сайта, функция должна возвращать цену вещи в рублях или долларах, зависимо от настроек бота, но она возвращает "undefined" и я не могу понять что не так, буду благодарен за вашу помощь.
Код
Кликните здесь для просмотра всего текста

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function GetPriceItem( itemname ) {
    var url_b = 'http://csgo.backpack.tf/api/IGetMarketPrices/v1/?key='+BackPackKey+'&compress=1&appid=730';
    var cost;
    request( url_b, function( error, response, body ) {
        if( error && response.statusCode !== 200 ) {
            errorLog( error );
            return;
        }
        var obj = JSON.parse( body );
        if( obj.response.success == 1 ){
            fs.writeFileSync( 'itemPrice.txt', body );
        } else {
            body = fs.readFileSync( 'itemPrice.txt', 'utf8' );
            obj = JSON.parse( body );
        }   
        if( CurrencyType == 'RUB' ) {
            var r_url = 'https://query.yahooapis.com/v1/public/yql?q=select+*+from+yahoo.finance.xchange+where+pair+=+%22USDRUB,EURRUB%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';
            var courrent;
            request( r_url, function( error, response, body ) {
                if( error && response.statusCode !== 200 ) {
                    errorLog( error );
                    return;
                }
                courrent = JSON.parse( body );
                courrent = courrent.query.results.rate[0].Rate;
            });
            cost = obj.response.items[itemname].value / 100 * courrent;
        } else {
            cost = obj.response.items[itemname].value / 100;
        }
        return cost;
    });
}
Вызов функции:
Javascript
1
GetPriceItem( 'StatTrak™ M4A1-S | Flashback (Factory New)' );

Спасибо за ответ!
Миниатюры
Возврат функции  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2017, 04:46
Ответы с готовыми решениями:

Node не работает возврат из функции
var titles = GetTitles(); ///.... function GetTitles() { connection.query('SELECT * FROM...

Возврат 2 значений из функции с одним вызовом этой же функции
Вообщем где то в какой то игре была хукнута одна функция int function(int arg1,int arg2,int...

возврат функции
Здравствуйте. Мне нужно, чтобы при выборе функции с помощью radiobutton, она была именно как...

Возврат массива из функции
Всем привет! Кто подскажет - можно ли в Паскале: 1. в функцию передавать массив? 2. из функции...

7
Coding is art
Эксперт JS
523 / 412 / 148
Регистрация: 04.09.2013
Сообщений: 1,044
15.04.2017, 18:20 2
ну так всё правильно..
у вас функция ничего не возвращает..
у вас возврат внутри колбека, а это не то же самое..
0
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 66
16.04.2017, 03:53  [ТС] 3
Пробовал выносить return за пределы колбека, ничего не изменилось.
Прочитал в сети что в моем случае нужно вроде как использовать Promise, но не могу разобраться как переделать функцию...
0
Coding is art
Эксперт JS
523 / 412 / 148
Регистрация: 04.09.2013
Сообщений: 1,044
16.04.2017, 04:22 4
Например так:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function requestPromise(uri) {
    return new Promise(function (resolve, reject) {
        request(uri, function (error, response, body) {
            if (error) {
                return reject(error);
            }
            if (response.statusCode !== 200) {
                return reject(new Error('Invalid status code'));
            }
            resolve(body);
        });
    })
        .catch(function (error) {
            errorLog(error);
            throw error;
        })
        .then(JSON.parse);
}
function GetPriceItem(itemname) {
    return Promise.resolve('http://csgo.backpack.tf/api/IGetMarketPrices/v1/?key=' + BackPackKey + '&compress=1&appid=730')
        .then(requestPromise)
        .then(function (obj) {
            if (obj.response.success === 1) {
                fs.writeFileSync('itemPrice.txt', JSON.stringify(obj));
            } else {
                obj = JSON.parse(fs.readFileSync('itemPrice.txt', 'utf8'));
            }
            return obj.response.items[itemname].value / 100;
        })
        .then(function (cost) {
            if (CurrencyType !== 'RUB') {
                return cost;
            }
            return Promise.resolve('https://query.yahooapis.com/v1/public/yql?q=select+*+from+yahoo.finance.xchange+where+pair+=+%22USDRUB,EURRUB%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=')
                .then(requestPromise)
                .then(function (body) {
                    return body.query.results.rate[0].Rate;
                })
                .then(function (rate) {
                    return cost * rate;
                });
        });
}
 
// GetPriceItem('something').then(function( cost ) { console.log(cost); });
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
16.04.2017, 10:57 5
golden103, это
Javascript
1
function( error, response, body ) {
заменяешь на
Javascript
1
( error, response, body ) => {
Всё
0
Coding is art
Эксперт JS
523 / 412 / 148
Регистрация: 04.09.2013
Сообщений: 1,044
16.04.2017, 12:19 6
Лучший ответ Сообщение было отмечено golden103 как решение

Решение

Это не верно.
Он пытается сделать возврат функции внутри колбека, а это в ДжаваСкрипте не работает.
Основы нужно хотя бы знать..

Нужно передавать коллбэк в функцию или делать промис.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
16.04.2017, 12:52 7
muxahuk1214, (
0
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 66
16.04.2017, 13:28  [ТС] 8
Сделал через callback, вроде работает все.
Спасибо всем кто ответил
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2017, 13:28

Возврат переменной из функции.
Мне необходимо результат работы одной функции передать другой, итог вывести в браузер. Я попытался...

Возврат указателя из функции
Почему функция vvod не возвращает указатель? #include"stdafx.h" #include "conio.h"...

Возврат структуры из функции
Задание на структуру: создается банковский счет с возможностью изменения его данных по ходу. Я не...

Возврат результат из функции
На вход процедуры подаю ширину и долготу, но не могу понять как вернуть результат этот функции в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru