1

I would like to make multiple calls to get JSONPs and insert their values into an array inside of a for loop. However, currently my result is an array filled with undefined values. How can I make this work properly?

Code:

function fetchColumnRange(sheetId,colStart,colEnd,row) {
    var colStartNum = isNumber(colStart) ? colStart : excelColumnNumber(colStart);
    var colEndNum = isNumber(colEnd) ? colEnd : excelColumnNumber(colEnd);
    var values = [], value;
    for (i = colStartNum; i <= colEndNum; i++) {
        value = fetchCellValue(sheetId,i,row); // IT HAS TO WAIT, BUT HOW???
        values.push(value);
    }
    return values;
}

function fetchCellValue(sheetId,col,row) {
    var script = document.createElement('script');
    var colNum = isNumber(col) ? col : excelColumnNumber(col); // Column input can be either a number or a letter
    script.src = 'https://spreadsheets.google.com/feeds/cells/0AtMEoZDi5-pedElCS1lrVnp0Yk1vbFdPaUlOc3F3a2c/' + sheetId + '/public/values/R' + row + 'C' + colNum + '?alt=json-in-script&callback=insertCellValue';
    document.body.appendChild(script);
}

function insertCellValue(data) {
    var value = data.entry['gs$cell']['$t'];
    return value;
}

function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

console.log(fetchCellValue(1,'A',2));
console.log(fetchCellValue(1,'B',2));
console.log(fetchColumnRange(1,'A','B',2));

Output:

["Test 1"]
["Lorem ipsum"]
[undefined, undefined]
bmpasini
  • 1,503
  • 1
  • 23
  • 43
  • of course, you ll get all of them as undefined, jsonp callbacks are asynchronous, I am not too familiar with jsonp, but my suggestion would be a mash-up of promises and [this answer](http://stackoverflow.com/questions/9570768/pass-additional-parameter-to-a-jsonp-callback) – mido Feb 27 '15 at 01:53

0 Answers0