Cloudinary API – 解决承诺
我想写一个函数返回一个布尔值,指示在我的Cloudinary空间中是否存在具有指定public_id的图像。
我可以使用以下代码将结果logging到控制台:
function isUploaded(public_id) { cloudinary.api.resource(public_id, function(response){ console.log(response.hasOwnProperty('public_id')); }); }; isUploaded('test');
但是,我想将结果(布尔值)传递给另一个函数。 使用return语句导致{ state: 'pending' }
被logging:
function isUploaded(public_id) { return cloudinary.api.resource(public_id, function(response){ return response.hasOwnProperty('public_id'); }); }; console.log(isUploaded('test'));
这是与JavaScript承诺有关。 我似乎无法重组我的代码,使其工作。 任何帮助将非常感激。
问题是cloudinary.api.resource
asynchronous运行(这就是为什么它需要一个callback函数)。
你可以让你的isUploaded
函数返回一个Promise
,一旦这个callback被调用就parsing。
var cloudinary = require('cloudinary'); function isUploaded(public_id) { return new Promise(function (resolve, reject) { cloudinary.api.resource(public_id, function(response) { var isUploaded = response.hasOwnProperty('public_id'); resolve(isUploaded); }); }); }; isUploaded('test') .then(function (result) { console.log(result); })
请注意, api.resource()
是速率有限( pipe理API的一部分),所以这不是一个“可伸缩的”解决scheme。
您可以执行HEAD请求并获取响应的statusCode
– 200表示资源存在于您的帐户中,否则为404。
例如 –
var http = require('http') var options = {method: 'HEAD', host:'res.cloudinary.com',path:'/<cloud_name>/image/upload/<yourimage.jpg>'} var req = http.request(options, function(res) {console.log(res.statusCode);}); req.end();