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.resourceasynchronous运行(这就是为什么它需要一个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();