Я использую встроенный Rhino Interpreter в синем (среда композиции музыки для Csound), чтобы создать «оценку» (нотную запись). В синий цвет вы можете сделать это, написав функцию затем делатьJavaScript в Rhino Interpreter - функция возвращает undefined
score = myFunction()
Моя функция получает изображение с помощью OnLoad и извлекает информацию пикселя, который будет использоваться для генерации счет. Проблема в том, что моя функция не получает достаточно времени для загрузки изображения и возврата данных до того, как он присваивает его переменной. Я пробовал использовать setTimeout(), но это не помогло.
Я попробовал это в браузере, и он действительно «не определен».
В принципе, мне нужен способ отсрочить присвоение переменной оценки. Это возможно?
Спасибо
function score(){
var img = new Image();
img.src = "http://static.webshopapp.com/shops/023001/files/024718445/256x256x2/major-dog-barbell-mini.jpg";
img.crossOrigin = "Anonymous";
var score = "abc";
img.onload = function(){
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var imgData=ctx.getImageData(0,0,canvas.width,canvas.height);
score = "i1 0 2 440 0.5\n"
for (var i=0;i<imgData.data.length;i+=4){
score += "i1 + 0.1 " + (imgData.data[i] + 500).toString() + " 0.5\n"
}
return score;
}
}
score = score();
// TRY THIS IN BROWSER - RETURNS UNDEFINED
//console.log(score())
Спасибо за ваш ответ, который работает как шарм в браузере, однако он не будет работать в синем, ему нужно что-то вроде формы = myFunction() в основной программе (назначение должно происходить за пределами любые функции). Как вы думаете, я могу это сделать? – DrumPower3004
Характер асинхронных вызовов требует, чтобы вы использовали функции обратного вызова, чтобы вернуть результат. К сожалению, я не знаком с платформой Rhino и Blue, чтобы помочь вам в этом. Вам нужно будет либо поместить счет = myFunction() внутри анонимной функции (где console.log (оценка) находится в коде выше, прямо сейчас), либо подумайте об использовании обещаний, если они доступны. – KostasX