Показать сообщение отдельно
  #3 (permalink)  
Старый 20.08.2021, 11:01
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Сообщение от ksa Посмотреть сообщение
Используй промисы...
https://learn.javascript.ru/promise-basics#loadscript

Тогда ты сам сможешь управлять их последовательностью выполнения, строя цепочки
https://learn.javascript.ru/promise-...mer-loadscript

Или используя async/await
https://learn.javascript.ru/async-await
Мне бы конечно хотелось, чтобы данные залетали одновременно со всех вкладок. но при этом сохранялось название вкладки.
Нашел в старой ветке пример с fetch он вроде как работает, но если делать по первому варианту без fetch, то внутрь гугл фунции невозможно передать что-то (например название вкладки). от fetch нужно как-то избавиться, чтобы можно было запускать скрипт с рабочего стола...


<div id="test"></div>
<div id="test2"></div>

<script>
(async function main() {
	try {
  var idfromURL="16gDZVsB8FOIxrsFKbkbBNWC37lPUAfKOGf-rCVxeOmY";
var sheetsWeNeed =["system","parts","goods","images","GD-images"];
var dataURL=" ";
for (var im=0; im<sheetsWeNeed.length; im++) {
  
		const response = await fetch("https://docs.google.com/spreadsheets/d/16gDZVsB8FOIxrsFKbkbBNWC37lPUAfKOGf-rCVxeOmY/gviz/tq?sheet="+sheetsWeNeed[im]+"&headers=1");
		const text = await response.text();

		const getData = new Function(`return new Promise(setResponse => {
			const google = { visualization: { Query: { setResponse } } };
			${text}
		})`);
		const data = await getData();

		/* вывод в консоль и на страницу */
		//console.log(data.table.cols);
    
    for (var il=0; il<data.table.rows.length; il++) {
var fields = Object.create(null);
for (var ik=0; ik<data.table.cols.length; ik++) {
if(data.table.rows[il].c[ik]!=undefined && data.table.rows[il].c[ik].v!=null ){
if(data.table.cols[ik].label=="id"){data.table.cols[ik].label="title"}
if(data.table.cols[ik].label=="name"){data.table.cols[ik].label="caption"}
if(sheetsWeNeed[im]=="images" || sheetsWeNeed[im]=="GD-images" ){ fields.type="image/jpeg"  } 
if( sheetsWeNeed[im]=="GD-images" ){ data.table.rows[il].c[ik].v="https://drive.google.com/uc?export=download&confirm=no_antivirus&id="+data.table.rows[il].c[ik].v  } 
if(data.table.cols[ik].label=="tags" && sheetsWeNeed[im]=="parts"){data.table.rows[il].c[ik].v=data.table.rows[il].c[ik].v+" $:/TOC"}
if(data.table.cols[ik].label=="tags" && sheetsWeNeed[im]=="goods"){data.table.rows[il].c[ik].v=data.table.rows[il].c[ik].v+" $:/Note"}

//console.log(currSheet);    

//fields[data.table.cols[ik].label]=data.table.rows[il].c[ik].v;


 document.getElementById('test2').innerHTML=(sheetsWeNeed[im]+" "+data.table.cols[ik].label +" __ " +data.table.rows[il].c[ik].v)
}
//if($tw.browser) {$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getModificationFields(),fields,$tw.wiki.getCreationFields()))};

}
}
  
    
    
    
    
	//	pre.textContent = JSON.stringify(data, null, "    ");
	}} catch(error) {
		//pre.textContent = error.message;
		console.error(error);
    
  
	}
})();
</script>
Ответить с цитированием