Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭()后未删除RNFetchBlob blob blob_Javascript_Reactjs_Firebase_React Native_React Native Fetch Blob - Fatal编程技术网

Javascript 关闭()后未删除RNFetchBlob blob 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

我正在使用RNFetchBlob将图像从本地(ios)文件系统上载到Firebase

虽然我的映像正在被删除,但我的blob在关闭后仍保留在文件系统中。 我试着解开这个斑点,但它仍然存在

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()的
都具有访问权限,或者显式传递它。