Javascript 访问canvas.ToBlob()异步函数外部的blob值
我正在使用Javascript 访问canvas.ToBlob()异步函数外部的blob值,javascript,html,promise,Javascript,Html,Promise,我正在使用HTMLCanvas元素,该元素在async toBlob()函数的外部返回blob对象。这个函数不返回输出值,所以我尝试在外部声明一个变量,并通过命令访问它 我如何将JS Promise用于此场景? var-myblob; canvas.toBlob(函数(blob){ myblob=blob; log(“内部”+myblob);//在控制台外部之后获取值 }) console.log(“外部”+myblob);//获取未定义的您可以使用Promise构造函数,将Blob实例传递到
HTMLCanvas
元素,该元素在async toBlob()函数的外部返回blob对象。这个函数不返回输出值,所以我尝试在外部声明一个变量,并通过命令访问它
我如何将JS Promise
用于此场景?
var-myblob;
canvas.toBlob(函数(blob){
myblob=blob;
log(“内部”+myblob);//在控制台外部之后获取值
})
console.log(“外部”+myblob);//获取未定义的
您可以使用Promise
构造函数,将Blob
实例传递到resolve()
,在处访问Promise
值。然后()
constblob=wait new Promise(resolve=>canvasElem.toBlob(resolve));
我有另一个想法。。。与标记为最佳想法的类似。。。then的问题是,为了从承诺中获得结果,您必须在块内。现在Javascript支持wait类似于c#,这是很好的,因为您可以运行函数并等待,直到解析,然后将结果发送到未附加到任何函数的变量,例如:
/*基本上,我们创建一个函数,该函数接收一个名为mycanvas的画布,然后我们告诉该函数返回一个新的承诺,该承诺在.toBlob方法中“解析”,该方法默认提供一个Blob参数*/
函数getCanvasBlob(mycanvas){
返回新承诺(功能(解决、拒绝){
mycanvas.toBlob((blob)=>{
解析(blob)
})
})
}
var-myblob;
试一试{
myblob=等待getCanvasBlob(来自某处的画布);
}
捕获(错误){
console.log(错误);
}
/*没有必要使用try/catch,您可以像这样使用它*/
var myblob=wait getCanvasBlob(CANVAS\u来自某处)
在.toBlob()
回调中执行任务,或使用承诺
构造函数或可能重复的感谢,并感谢您的及时回复。我的问题是,我必须在一个全局变量中设置blob的值,这样我就可以在这个函数之外访问它。例如:在canvasBlob内部。然后(function(blob)){this.something=blob;}在.toBlob()回调返回值之前,您将无法访问blob
。使用传递到.then()
的第一个函数执行来自.toBlob()的Blob
回调的任务。谢谢。在我的场景中,我有一个视频元素和画布,用于从视频中捕获快照并在图像控件中进行渲染。当前,代码在捕获鼠标单击事件中执行。现在,一旦我有了图片,我必须让用户点击一个按钮,通过ajax请求将图片发送到服务器。当前,toBlob()正在捕获事件中执行,我想看看是否有办法存储该blob,以便我可以在按钮单击事件中访问它,将其提交给服务器。任何建议都会很有帮助!我认为在按钮单击中第二次调用.toblob()会返回相同的图像。非常感谢。你的第一次尝试就要成功了。调用.toBlob()
时,在.toBlob()
回调中分配myblob
的Blob
值。看也精彩!谢谢。布莱利安的确:)太棒了!你能解释一下吗?
function getCanvasBlob(canvas) {
return new Promise(function(resolve, reject) {
canvas.toBlob(function(blob) {
resolve(blob)
})
})
}
var canvasBlob = getCanvasBlob(canvas);
canvasBlob.then(function(blob) {
// do stuff with blob
}, function(err) {
console.log(err)
});