私はある順序で起こる必要のある半複雑な約束を持っています。プロミスチェーンの一部である関数の1つは、別の関数から解決される前に約束を返すことです。例:Jquery。関数が終了するのを待たずに
this.triOverlay = new Image();
this.triOverlayFinal = new Image();
//Start the promise chain for overlay stuff
$.when($.loadImage(this.triOverlay, 'art/small.png'), this.loadAgentImages()).then(function() {
console.log(">>> ALL DONE!!!! <<<<");
});
LoadImageは、繰延オブジェクトを構築し、画像の読み込みと処理のためにそれを設定し、単純なjQueryの関数である:それは複雑になる
$.loadImage = function (image, url) {
// Define a "worker" function that should eventually resolve or reject the deferred object.
var loadImage = function (deferred) {
image.onload = loaded;
image.onerror = errored; // URL returns 404, etc
image.onabort = errored; // IE may call this if user clicks "Stop"
image.src = url;
function loaded() {
unbindEvents();
console.log(">>>>> resolved image! URL: ");
deferred.resolve(image);
}
function errored() {
unbindEvents();
deferred.reject(image);
}
function unbindEvents() {
// Ensures the event callbacks only get called once.
image.onload = null;
image.onerror = null;
image.onabort = null;
}
};
return $.Deferred(loadImage).promise();
};
はloadAgentImagesに、私は別のセットを持っているということです
CubePan.prototype.loadAgentImages = function() {
var largePhotoPath = 'someURL'; //Just an example
var smallPhotoPath = 'someURL2'; //Just an example
//This cubePan
var me = this;
return $.when($.loadImage(this.agent.photo, smallPhotoPath), $.loadImage(this.agent.blurAgentPhoto, largePhotoPath)).then(function() {
//return deferred.promise();
console.log(">>>> before start on bluid blur and build TriOverlay <<<<");
return buildBlur(me);
//return blur;
}, function() { console.log(">>>> blur rejected <<<<"); });
};
元画像とCAL:それらがロードされた後に発生する必要があります句でロードする必要がある画像のlからloadAgentImagesは同じオブジェクトにあります。私は私が上記を含んでいなかったことを知っている。
を正しく発射し、それはbuildBlur(私を)呼び出すときに、2枚の画像がで解決されたら:
function buildBlur(me) {
console.log(">>>> buildBlur <<<<");
var blurCanvas = document.createElement('canvas');
var blurCTX = blurCanvas.getContext('2d');
blurCanvas.height = me.agent.blurAgentPhoto.height;
blurCanvas.width = me.agent.blurAgentPhoto.width;
blurCTX.drawImage(me.agent.blurAgentPhoto, 0, 0, blurCanvas.width, blurCanvas.height);
//This function can be found in stackBlur.js
boxBlurCanvasRGBA(blurCanvas, 0, 0, blurCanvas.width, blurCanvas.height, 20);
return $.loadImage(me.agent.blurAgentPhotoFinal, blurCanvas.toDataURL('image/png', 1.0));
};
その、その、それを返す解決されたらしかし、BuildBlurは約束を返しません。直ちに。最終的な画像(blurAgentPhotoFinal)がまだ読み込まれずに解決されているにもかかわらず、チェーンの残りの部分を解決すると思っています。
$ .loadImageは、上記のすべてのインスタンスで機能しますが、buildBlurを使用するインスタンスでは機能しません。
チェーンを完全に解決する前にbuildBlurの$ .loadImageが終了するのを待っている理由は何ですか?
ありがとうございます!