Node.js에서 Chatwork의 작업 추가 메모 2

마지막 기사 의 계속입니다.

작업을 추가할 때 멤버 목록을 가져온 다음 추가합니다.

API 문서는 여기입니다.

[JavaScript] 비동기 처리 콜백 지옥에서 벗어나는 방법 을 참고로 async/await 의 aa 를 사용해 동기적으로 처리를 써 봅니다.
$ npm i aa request

chtask.js
'use strict';

if (!process.env.chtoken) {
    console.log('Error: Specify token in environment');
    process.exit(1);
}

let aa = require('aa');
let request = require('request');
const ROOM_ID = '43484166';

//タスク追加
function addTask(text, userList){
  let task = {
    body: text,
    limit: 0,
    to_ids: userList,
  };

  let options = {
      url: `https://api.chatwork.com/v1/rooms/${ROOM_ID}/tasks`,
      headers: {
          'X-ChatWorkToken': process.env.chtoken
      },
      form: task,
      json: true
  };

  return new Promise((resolve,reject) => {
    request.post(options, (error, response, body) => {
      if(error) reject('error: '+ response.statusCode);
      resolve(body);
    });
  });

}

//メンバー取得
function getMember(){
  let options = {
      url: `https://api.chatwork.com/v1/rooms/${ROOM_ID}/members`,
      headers: {
          'X-ChatWorkToken': process.env.chtoken
      },
      json: true
  };

  return new Promise((resolve,reject) => {
    request.get(options, (error, response, users) => {
      if(error) reject('error: '+ response.statusCode);
      let userList = '';
      for (let i = 0, len = users.length; i < len; i++) {
        userList += users[i].account_id;
        if(len !== i+1) userList += ',';
      }
      resolve(userList);
    });
  });
}

//同期実行
aa(function*() {
  let userList = yield getMember();
  let res = yield addTask('message', userList);
  return res;
}).then(
  function (val) { console.info('ok: ',val); },
  function (err) { console.error('ng: ',err); }
);


실행해 보겠습니다.
$ chtoken=xxxxxxxxx node chtask.js

이런 식으로 작업 추가할 수 있었습니다.



API를 두 번 던질 때는 비동기 처리 연습이 되네요 ~

좋은 웹페이지 즐겨찾기