我正在为我们团队的 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/