Javascript 关闭()后未删除RNFetchBlob blob blob
我正在使用RNFetchBlob将图像从本地(ios)文件系统上载到Firebase 虽然我的映像正在被删除,但我的blob在关闭后仍保留在文件系统中。 我试着解开这个斑点,但它仍然存在Javascript 关闭()后未删除RNFetchBlob blob blob,javascript,reactjs,firebase,react-native,react-native-fetch-blob,Javascript,Reactjs,Firebase,React Native,React Native Fetch Blob,我正在使用RNFetchBlob将图像从本地(ios)文件系统上载到Firebase 虽然我的映像正在被删除,但我的blob在关闭后仍保留在文件系统中。 我试着解开这个斑点,但它仍然存在 function createBlob(uri, mediaType) { const Blob = RNFetchBlob.polyfill.Blob; const typePrefix = isImage(mediaType) ? 'image' : 'video'; window.Blo
function createBlob(uri, mediaType) {
const Blob = RNFetchBlob.polyfill.Blob;
const typePrefix = isImage(mediaType) ? 'image' : 'video';
window.Blob = Blob;
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
return new Promise((resolve, reject) => {
const uid = guid();
const mediaRef = firebase.storage().ref('users').child(`${uid}.${mediaType}`);
let uploadBlob = null;
Blob.build(uri, { type: `${typePrefix}/${mediaType}` })
.then((blob) => {
uploadBlob = blob;
return mediaRef.put(blob, { type: `${typePrefix}/${mediaType}` });
})
.then((response) => {
uploadBlob.close();
resolve(response);
})
.catch(error => {
reject(error);
});
});
}
这是关闭blob后它在我的模拟器文件夹中的外观
在
createBlob
之后,我正在使用RNFetchBlob.fs.unlink(path)
从本地存储中删除文件,我认为您没有close()
工作,因为uploadBlob
变量是在上一个闭包中创建的,但没有传递到下一个块。我想这可能有用
Blob.build(uri, { type: `${typePrefix}/${mediaType}` })
.then((blob) => {
uploadBlob = blob;
return ({
response: mediaRef.put(blob, { type: `${typePrefix}/${mediaType}` }),
blob: uploadBlob
})
.then(({response, blob}) => {
blob.close();
resolve(response);
})
你能告诉我你是如何尝试解除文件链接的吗?解释几种可能的方法。@t谢谢。我认为只有一种方法,除非你使用session为什么你要用一个新的Promise来包装Blob.build?您可以返回promise-Blob.build。uploadBlob.close是异步操作吗?在这种情况下,在尝试取消链接之前,您可能必须等待它。@vijayst您是对的。uploadBlob.close是异步的,并返回一个承诺。但是,即使在等待接近取消链接之后,blob也不会被移除,这确实会移除blob,但会失败,错误为“无法从路径检索文件”。太棒了!我想那是另一个问题。该错误发生在哪一行?该错误是特定于应用程序的。不过,你确实找到了问题的根源。为什么需要将uploadBlob作为对象参数传递给返回的承诺?每个.then()
块都是块作用域,因此您需要在全局作用域上设置变量,以便所有then()的
都具有访问权限,或者显式传递它。