javascript - Nodejs 生成器异步回调 - slack unity 云构建

标签 javascript node.js unity-game-engine callback slack

我正在为我们团队的 Slack channel 进行自定义 Unity 云构建集成。并陷入了正确回调的困境。看起来像是在异步任务完成之前返回 null,因此需要一些帮助来进行正确的异步回调。我已经包含了脚本和 console.log 结果。

var request = require('request');
var config = require('../../config.js');
var slackManager = require('../slack/slackmanager.js');

module.exports = {
    AlertSlack: function (payload) {
        var getLink = GetLink(payload);
        console.log(getLink.next());
        slackManager.alertSlack(getLink.next().value);
    }
}

function* GetLink(payload) {
    try {
        var shareEndPointURL = config.unity.apibaseurl + payload.links.api_self.href + "/share";
        var shareID = yield HttpRequestHandler(shareEndPointURL, 'GET');
        
        //space to yield more httpRequest
        //space to yield more httpRequest
        //space to yield more httpRequest
        
        return " some final data ";
    } catch (e) {
        console.log("Exception : " + e);
        return e;
    }
}

function HttpRequestHandler(endpointURL, httpMethod) {
    var options = {
        url: endpointURL,
        method: httpMethod,
        headers: config.unity.unityAuthHeaders
    }
    request(options, function (err, resp, body) {
       console.log(body);
       return body;
    });
}

这是控制台日志

{ value: undefined, done: false }
<-----recived call in slackmanager.js with ### some final data ###----->
{"shareid":"dfgdfgszdffzc"}

最佳答案

我终于找到了解决方案,我重新考虑了逻辑并制定了简单的事件处理程序。

Since I was already using an async callback successfully, it was pointless to make unwanted generators on top of it.

这是我想出的解决方案。比旧版本更简单、干净。

var request = require('request');
var config = require('../../config.js');
var slackManager = require('../slack/slackmanager.js');

module.exports = {
    AlertSlack: function (payload) {
        var shareEndPointURL = config.unity.apibaseurl + payload.links.api_self.href + "/share";    
        HttpRequestHandler(shareEndPointURL, "GET", HandleShareID);
    }
}

function HttpRequestHandler(endpointURL, httpMethod, handler) {
    var options = {
        url: endpointURL,
        method: httpMethod,
        headers: config.unity.unityAuthHeaders
    }
    request(options, function(error, response, body) {
        handler(JSON.parse(body));
    });
}

function HandleShareID(result){
    var downloadURL = config.unity.downloadEndPointBase + result.shareid;
    HttpRequestHandler(downloadURL, 'GET', HandleDownLoadedData);
}

function HandleDownLoadedData(result) {
    slackManager.alertSlack(result);
}

关于javascript - Nodejs 生成器异步回调 - slack unity 云构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37596563/

相关文章:

javascript - 如何从 php 循环中获取多个文本框的值并使用 javascript 对它们求和

javascript - 根据数字使用 Javascript 更改文本颜色

node.js - 在 mongoose (mongodb) 中设置集合属性的到期时间

node.js - 渲染 javascript 函数返回,其中包含链接

android - 构建 APK 时出现 CommandInvokationFailure 错误?

unity-game-engine - 多个碰撞器的推荐方法

firebase - 如何在Bigquery中查询此自定义事件数据?

javascript - 单击列表 javascript 中的项目时处理事件

node.js - 是否可以使用 "fake"请求直接从代码调用 Express Router?

javascript - 如何在函数外访问 JavaScript 函数参数?