Я хотел бы сделать программу, которая может отслеживать несколько объектов запаса и отображать основную информацию о них (IE: их цена).Как создать объект Javascript, который отслеживает цену акции?
У меня есть этот код, который может успешно восстановить цену акции:
function getStock(symbol, callback){
var url = 'https://query.yahooapis.com/v1/public/yql';
var data = encodeURIComponent("select * from yahoo.finance.quotes where symbol in ('" + symbol + "')");
$.getJSON(url, 'q=' + data + "&format=json&diagnostics=true&env=http://datatables.org/alltables.env")
.done(function (data) {
result = data.query.results.quote.LastTradePriceOnly;
callback(result);
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log('Request failed: ' + err);
});
}
getStock("goog", function(){alert(result)});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Я хотел бы быть в состоянии создать простой объект, который может отслеживать акции. Однако у меня проблемы с асинхронностью и запросом JSON. Вот мой код с «запасом» объектом:
function getStock(symbol, callback) {
var url = 'https://query.yahooapis.com/v1/public/yql';
var data = encodeURIComponent("select * from yahoo.finance.quotes where symbol in ('" + symbol + "')");
$.getJSON(url, 'q=' + data + "&format=json&diagnostics=true&env=http://datatables.org/alltables.env")
.done(function(data) {
result = data.query.results.quote.LastTradePriceOnly;
callback(result);
})
.fail(function(jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log('Request failed: ' + err);
});
}
function stock(symbol) {
this.price = 0;
getStock(symbol, function(result) { //this function is my callback
console.log(result);
this.price = result;
});
this.printPrice = function() {
alert("The price is: " + this.price);
}
}
var s = new stock("goog");
$("#button").click(function() {
s.printPrice()
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="button">Print Price</button>
Как вы можете заметить, я попытался с помощью обратного вызова, который, кажется, являются подходящим решением этой проблемы (новой для Javascript). Однако, по-видимому, на самом деле не задается переменная класса. В консоли он печатает правильную цену, но она, похоже, не меняет «this.price» (это то, что мне нужно это делать)
Любые советы относительно того, почему это не работает или как создать метод «updateStockPrice()» был бы очень полезен.
'this' внутри вашей функции обратного вызова больше не относится к' 'this' из функции stock'. См. Http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside-a-callback. – Jasen