npm react-native-fetch-blob - " RNFetchBlob.fetch不是函数"

时间:2016-07-19 11:32:51

标签: node.js npm react-native fetch

我正在使用npm包react-native-fetch-blob 我已按照git repository中的所有步骤使用该包。

然后我使用以下行导入了包:

var RNFetchBlob = require('react-native-fetch-blob');

我正在尝试从服务器请求包含图像的BLOB。

这是我的主要方法。

fetchAttachment: function(attachment_uri) {

   var authToken = 'youWillNeverGetThis!'
   var deviceId = '123';
   var xAuthToken = deviceId+'#'+authToken

   //Authorization : 'Bearer access-token...',
   // send http request in a new thread (using native code)
   RNFetchBlob.fetch('GET', config.apiRoot+'/app/'+attachment_uri, {

       'Origin': 'http://10.0.1.23:8081',
       'X-AuthToken': xAuthToken
    })
    // when response status code is 200
    .then((res) => {
       // the conversion is done in native code
       let base64Str = res.base64()
       // the following conversions are done in js, it's SYNC
       let text = res.text()
       let json = res.json()
    })
    // Status code is not 200
    .catch((errorMessage, statusCode) => {
       // error handling
    });
}

我一直收到以下错误:

"可能未处理的Promise Refection(id:0):TypeError:RNFetchBlob.fetch不是函数"。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

问题是您正在使用带有针对ES6 / ES2015编写的库的ES5样式require语句。您有两种选择:

ES5:

import RNFetchBlob from 'react-native-fetch-blob'

ES6:

HashMap<String, Object> merchantDetailMap = new HashMap<String, Object>();      
            if(dataAndSize != null)
            {
                ResultList<VoltMerchantDetail>  tempMerchantList = (ResultList<VoltMerchantDetail>) dataAndSize.get("VoltDBDataList");
                vMerchantList = (List<VoltMerchantDetail>) tempMerchantList;
                for(VoltMerchantDetail vMerchant : vMerchantList){
                    HashMap<String, Object> merchantDetails = new HashMap<String, Object>();
                    merchantDetails.put("toActorMsisdn", vMerchant.getToActorMsisdn());
                    merchantDetails.put("fromActorMsisdn", vMerchant.getFromActorMsisdn());
                    merchantDetails.put("customCol1", vMerchant.getCustomCol1());
                    merchantDetails.put("customCol2", vMerchant.getCustomCol2());
                    merchantDetails.put("customCol3", vMerchant.getCustomCol3());
                    merchantDetails.put("customCol4", vMerchant.getCustomCol4());
                    merchantDetails.put("customCol5", vMerchant.getCustomCol5());               
                    merchantDetailMap.put(vMerchant.getMerUsername(),merchantDetails);
                }

答案 1 :(得分:1)

我的导入看起来像这样:从 'rn-fetch-blob' 导入 RNFetchBlob;

但我有一个错误:TypeError: RNFetchBlob.scanFile is not a function

我的代码:

const downloadAudio = async () => {
    const { config, fs } = RNFetchBlob;
    const meditationFilesPath =
      Platform.OS == 'android'
        ? `${fs.dirs.DownloadDir}/meditations/${id}`
        : `${fs.dirs.DocumentDir}/meditations/${id}`;
    let audio_URL = track;
    let options = {
      fileCache: true,
      path: meditationFilesPath + `/${id}.mp3`,
      addAndroidDownloads: {
        // Related to the Android only
        useDownloadManager: true,
        notification: true,
        path: meditationFilesPath + `/${id}.mp3`,
        description: 'Audio',
      },
    };
    try {
      const resAudio = await config(options).fetch('GET', audio_URL.uri);
      if (resAudio) {
        const audio = await RNFetchBlob.fs.scanFile([
          { path: resAudio.path(), mime: 'audio/mpeg' },
        ]);
        console.log('res -> ', audio);
        Alert.alert('Audio Downloaded Successfully.');
      }
    } catch (error) {
      console.error('error from downloadAudio', error);
    }
  };