【发布时间】:2016-11-13 23:57:18
【问题描述】:
所以我在这里有这个函数,我用它来迭代作为对象数组的音节
function showImagesByPairAtInterval(Syllables, interval, index) {
index = index || 0;
let slice = Syllables[index];
nextIndex = index + 1;
drawimagesonCanvas(slice.Url1, slice.Url2);//not finishing
if (nextIndex <= Syllables.length - 1) {
syllable_text.html(slice.The_Syl);
setTimeout(showImagesByPairAtInterval.bind(
null,
Syllables,
interval,
nextIndex
), interval);
}
else {
explain.html("Try Me Again");
syllable_text.html("<br/>");
$('#translate_button').removeAttr('disabled');
}
}
问题是drawimagesonCanvas 无法完成它的工作,它在interval 时间之后进入下一次迭代
这里是drawimagesonCanvas代码:
function drawimagesonCanvas(url1,url2)
{
var canvas = document.getElementById("canvas_images");
var IsBoth = (url2=="null");
var context = canvas.getContext('2d');
var img1 = new Image();
var img2 = new Image();
context.clearRect(0, 0, canvas.width, canvas.height);
if (!IsBoth) {
img1.onload = function () {
context.drawImage(img1, 0, 0, 150, 350);
};
img1.src = api + url1;
img2.onload = function () {
context.drawImage(img2, 150, 0, 150, 350);
};
img2.src = api + url2;
}
else
{
img1.onload=function(){
context.drawImage(img1,0,0,300,350);
}
img1.src = api + url1;
}
有没有办法让这个问题消失,请注意图像在服务器在线并且它不是本地的
【问题讨论】:
-
您需要等待 onload 事件触发,但看到可能有一两个,这并不像在 drawImagesonCanvas 中添加回调那么简单。鉴于您已经在使用 ES6 语法,我想您将能够使用 Promises - 无论如何都要考虑
-
我真的是 JavaScript 世界的初学者,有没有办法替代上面的代码,至少让它发生
-
我承认这一点,这里的代码确实为我打开了未来完成程序的各种方法,谢谢你真的像魅力一样工作你是最好的我的朋友请把它变成回答这样我就可以投票了
标签: javascript jquery asynchronous synchronization settimeout