code: function (tagArgs, returnImgAttr) {
    if (!APIKey) {
      throw new Error('flickr_api_key configuration is required');
    }
  
    var tag = tagUtil.convertAttr(tagArgs);
  
    
      return new Promise(function (resolve, reject) {
        
        
         
        var flJson = getFlickrCacheJson(tag.id);
        
        
        if(!flJson || !flJson.photo.imgSize){
          // console.log("[api access getSize]photoId= " + tag.id);
          var url = 'https://api.flickr.com/services/rest/?method=flickr.photos.getSizes' +
            '&api_key=' + APIKey +
            '&photo_id=' + tag.id +
            '&format=json' +
            '&nojsoncallback=1';
  
          https.get(url, function (res) {
            var data = '';
  
            res.on('data', function (chunk) {
              data += chunk;
            });
  
            res.on('end', function () {
              var json = JSON.parse(data);
              
              if (json.stat === 'ok') {
                  
                  var imgSize = getImageSize( json, tag.id, tag.size );
                  pushImageSizeAndExpress_flickrJson(imgSize, tag.id);
                  
                  resolve( addTagHeight( returnImgAttr , imgSize) );
                  
              } else {
                return reject('Flickr Tag Error: ' + tag.id + ' ' +  json.message);
              }
            });
  
          }).on('error', function (e) {
            return reject('Fetch Flickr API error: ' + e);
          });
          
        }else{
          // console.log("[cache getSize]photoId= " + tag.id);
          return resolve( addTagHeight(  tagUtil.imgFormat(tag, flJson) , flJson.photo.imgSize ));
        }
        
      });
    
  }
docs: promise Flickr API request
  @param  {Array} tagArgs Tag args ex: ['15905712665', 'z']
  @resolve {Object} image attrs