私は、「スコア」(音楽表記法)を生成するために、ブルーで埋め込まれたRhinoインタプリタ(Csoundの音楽合成環境)を使用しています。青ではあなたがこれを行うことができます機能を書き込むことによって、次にやってRhinoのJavaScriptインタプリタ - 関数は未定義を返します
score = myFunction()
My機能は、オンロードを使用して画像を取得し、スコアを生成するために使用されるピクセル情報を抽出します。問題は私の関数が画像をロードして変数に代入する前にデータを返すのに十分な時間が得られないことです。私はsetTimeout()を使用してみましたが、それは役に立たなかった。
私はブラウザでこれを試しましたが、実際には「未定義」を返します。
基本的に私はスコア変数への割り当てを遅らせる方法が必要です。これは可能ですか?
// Adding a callback function as parameter
function score(callback){
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"
}
// Now we can run the callback with our score data
return callback(score);
}
}
score(function(score){
console.log(score);
// Do your stuff with score data...
});
ブラウザでは魅力的ですが、青では機能しませんが、メインプログラムではscore = myFunction()の形式が必要です。任意の機能)。私はこれを行う方法があると思いますか? – DrumPower3004
非同期呼び出しの性質上、結果を返すためにコールバック関数を使用する必要があります。残念ながら、私はRhinoとBlueプラットフォームに精通していないので、これ以上の助けにはならない。匿名関数の中にscore = myFunction()を配置するか(ここではconsole.log(スコア)が上のコードにあります)、もしあればPromisesの使用を検討する必要があります。 – KostasX