var response = [{
createdAt: 1234567890,
data: "Hello world",
id: 0,
senderId: 12345,
senderName: "user1"
}];
var asyncFunc = async (isError = false) => new Promise(
function (resolve, reject) {
setTimeout(function () {
if(isError) reject("BAD_REQUEST");
resolve(response);
}, 1000);
}
)
console.log(await asyncFunc()); // response
console.log(await asyncFunc(true)); // signal:1 Uncaught (in promise) BAD_REQUEST
await asyncFunc(Boolean(Math.random()*2|0))
.then(response => console.info(response)) // response
.catch(error => console.error(error)) // BAD_REQUEST
Last active
February 7, 2019 09:58
-
-
Save katai5plate/e5a41d99ffcf7c4aa04ae7273a98e620 to your computer and use it in GitHub Desktop.
RAAmockのスケッチ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
window.RAA = {}; | |
window.RAA.responseTime = { | |
normal: 1000, | |
modal: 500, | |
}; | |
window.RAA.isEnable = !window.RPGAtsumaru; // APIを上書きするかどうか | |
window.RAA.isServerError = false; // 意図的にサーバーダウンを再現するか | |
// ===== UTILS ===== | |
window.RAA.AtsumaruApiError = function(code, message = ""){ | |
return { | |
errorType: "atsumaruApiError", | |
code, | |
message, | |
} | |
} | |
window.RAA.errors = { | |
BAD_REQUEST: new RAA.AtsumaruApiError('BAD_REQUEST'), | |
UNAUTHORIZED: new RAA.AtsumaruApiError('UNAUTHORIZED'), | |
API_CALL_LIMIT_EXCEEDED: new RAA.AtsumaruApiError('API_CALL_LIMIT_EXCEEDED'), | |
FORBIDDEN: new RAA.AtsumaruApiError('FORBIDDEN'), | |
INTERNAL_SERVER_ERROR: new RAA.AtsumaruApiError('INTERNAL_SERVER_ERROR'), | |
} | |
window.RAA.request = async ({ | |
waitTime = RAA.responseTime.normal, // レスポンスが返ってくる時間 | |
post = {}, // 送信するデータ | |
checkValid = p => !!p, // 第一引数をpostとして、falseだとエラー | |
succeeded = {}, // 成功時のレスポンス | |
failed = RAA.errors.BAD_REQUEST, // 失敗時のレスポンス | |
}) => new Promise( | |
(resolve, reject) => { | |
setTimeout(() => { | |
if(checkValid(post) === false) { | |
reject(failed); | |
} | |
resolve(succeeded); | |
}, waitTime); | |
} | |
) | |
window.RAA.modal = async ({message, decorate = s => s, checkValid = p => !!p}) => { | |
await RAA.request({ | |
waitTime: RAA.responseTime.modal, | |
post: message, | |
succeeded: { | |
src: message, | |
deco: decorate(message), | |
}, | |
checkValid, | |
}) | |
.then(r => { | |
console.info(`MODAL: ${r.src}`); | |
alert(r.deco); | |
}) | |
.catch(e => console.error(e)) | |
} | |
// ===== STATE ===== | |
RAA.state = {}; | |
RAA.state.query = { | |
param1: "RPG", | |
param2: "アツマール", | |
}; | |
RAA.state.scoreboards = [ | |
{ | |
boardId: 1, | |
boardName: "スコアボードの名前", | |
myRecord: { isNewRecord: false, rank: 1, score: 0 }, | |
ranking: [ | |
{ rank: 1, score: 0, userName: "" } | |
], | |
myBestRecord: { rank: 1, score: 0, userName: "" }, | |
} | |
]; | |
RAA.state.screenshot = { | |
handler: RAA.request({ succeeded: "default.png" }), | |
}; | |
RAA.state.globalServerVariable = [ | |
{ | |
id: 0, | |
body: { | |
name: "G-Variable", | |
maxValue: Number.MAX_SAFE_INTEGER, | |
minValue: Number.MIN_SAFE_INTEGER, | |
value: 123, | |
}, | |
// trigger: [ | |
// { | |
// id: 0, delta: 100, | |
// }, | |
// { | |
// id: 1, delta: { | |
// min: -100, | |
// max: 100, | |
// }, | |
// }, | |
// ] | |
} | |
]; | |
// ===== API ===== | |
if(RAA.isEnable){ | |
/***** コメントを利用する *****/ | |
/***** コントローラーを利用する *****/ | |
/***** サーバーにセーブを保存する *****/ | |
/***** マスターボリュームの設定 *****/ | |
/***** 外部リンクを表示する *****/ | |
// window.RPGAtsumaru.popups. | |
openLink = async openLinkUrl => { | |
await RAA.modal({ | |
message: openLinkUrl, | |
decorate: s => `<a href="${s}">${s}</a>`, | |
checkValid: p => !!p.match(/^http/), | |
}) | |
} | |
/***** クエリ情報の取得 *****/ | |
// window.RPGAtsumaru.experimental. | |
query = { ...RAA.state.query }; | |
/***** 作者情報を表示する *****/ | |
// window.RPGAtsumaru.experimental.popups. | |
displayCreatorInformationModal = async niconicoUserId => { | |
await RAA.modal({ | |
message: niconicoUserId, | |
decorate: s => `<a href="${s}">${s}</a>`, | |
checkValid: p => p === null || Number.isFinite(p), | |
}) | |
} | |
/***** スコアボードを利用する *****/ | |
/***** スクリーンショットをシェアする *****/ | |
// window.RPGAtsumaru.experimental.screenshot. | |
displayModal = async () => { | |
const openModal = async src => await RAA.modal({ | |
message: src, | |
decorate: s => `<img src="${s}" />` | |
}) | |
RAA.state.screenshot.handler | |
.then(r => openModal(r)) | |
.catch(e => console.error(e)) | |
} | |
// window.RPGAtsumaru.experimental.screenshot. | |
setScreenshotHandler = async promise => { | |
await RAA.request({ | |
waitTime: RAA.responseTime.normal, | |
post: promise, | |
checkValid: p => p instanceof Promise, | |
}) | |
.then(() => { RAA.state.screenshot.handler = promise }) | |
.catch(e => console.error(e)) | |
} | |
/***** グローバルサーバー変数 *****/ | |
// window.RPGAtsumaru.experimental.globalServerVariable. | |
getGlobalServerVariable = async globalServerVariableId => { | |
const data = RAA.state.globalServerVariable | |
.filter(v => v.id === globalServerVariableId) | |
const res = await RAA.request({ | |
waitTime: RAA.responseTime.normal, | |
post: globalServerVariableId, | |
succeeded: data[0], | |
checkValid: p => Number.isFinite(p) && data.length !== 0, | |
}); | |
return res.body; | |
} | |
// トリガーの仕様がよくわからない | |
// window.RPGAtsumaru.experimental.globalServerVariable. | |
// triggerCall = async (triggerId, delta = undefined) => {} | |
/***** 共有セーブを利用する *****/ | |
/***** ユーザー情報にアクセスする *****/ | |
/***** シグナルを送信する *****/ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment