最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Strava

运维笔记admin7浏览0评论

Strava

Strava

我正在使用带有Node 5.7的node-strava-v3从Strava的API中检索JSON集合。其实很简单,实际上没问题。我只是想借此机会尝试ES6发电机。到目前为止,我认为我得到了这个概念。但就Node-Strava-V3 API包装器而言,这些方法永远不会直接返回值或承诺。只允许回调。这让我想到了一个问题:如何将ES6 Generators概念插入游戏中?

拿这个:(这需要你可以在Strava门户上请求access_token)

var strava = require('strava-v3');
var mainActivity = {id: 504641206};
strava.activities.get(mainActivity, function (err, data){
  if(err){ console.log("Strava GET issue: ", err);
  /// consume the JSON data here...
};
//rest of the code

但我可以使用生成器暂停,直到这个“strava.activities.get()”方法结束?此方法不返回任何值,没有值,没有承诺。

谢谢你的所有建议

缩略词

回答如下:

您可以使用生成器和像co这样的库来完成此操作,但现在我们有async functions(ES2017,并且可以针对过时的环境进行转换)。

切向相关:任何提供回调的API都可以是承诺的:

const strava = require('strava-v3');
const mainActivity = {id: 504641206};
new Promise((resolve, reject) => {
    strava.activities.get(mainActivity, (err, data) => {
        if (err) {
            reject(err);
        } else {
          resolve(data);
        }
    });
}).then(
    result => {
        //rest of the code
    },
    error => {
        // handle error
    }
);

事实上,这种常见的模式在util.promisify编纂:

const strava = require("strava-v3");
const promisify = require("util").promisify;
const stravaActivitiesGet = promisify(strava.activities.get);

const mainActivity = {id: 504641206};
stravaActivitiesGet(mainActivity).then(
    result => {
        //rest of the code
    },
    error => {
        // handle error
    }
);

有多个库可以同时承诺整个API(而不是每个函数),例如node-promisify

如果我们使用util.promisifyasync函数:

const strava = require("strava-v3");
const promisify = require("util").promisify;
const stravaActivitiesGet = promisify(strava.activities.get);

const mainActivity = {id: 504641206};
(async () => {
    try {
        const data = await stravaActivitiesGet(mainActivity);
        //rest of the code
    } catch (error) {
        // handle error
    }
})();

如果你在逻辑中做其他异步事情,这通常是有意义的。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论