- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现剪刀石头布游戏的 CLI 版本。我正在使用查询器模块来处理 IO。我的主要功能如下所示:
RockPaperScissors.prototype.gameLoop = function()
{
var x;
var Promise = require('bluebird');
//simple promise test
//this.playGame().then(function(){ console.log("The end");});
Promise.coroutine(function*()
{
//for(x=0;x<this.maxTurns;x++)
//{
console.log('Printing '+ x.toString());
var action = yield this.playGame();
//}
if(this.playerScore > this.serverScore) { console.log('Player wins match');} else {console.log('Server wins match'); }
});
};
exports.RockPaperScissors = RockPaperScissors;
playGame() 函数返回使用 new Promise() 做出的 promise 。如果我这样做:
this.playGame().then(function(){ console.log("The end");});
promise 正确执行。但是,当在 Promise.coroutine() 内部使用时,不会执行任何操作。我在这里缺少什么?
这是 playGame() 函数的代码:
RockPaperScissors.prototype.playGame = function()
{
var inq = require('inquirer');
var rand = require('random-js');
var _ = require('lodash');
var promise = require('bluebird');
//make possibilities local
var possibilities = this.possibilities;
console.log ('------------------ Stats ----------------');
console.log ('Player: ' +this.playerScore+' Server: '+this.serverScore);
console.log ('-----------------------------------------');
var question1 ={
type:'rawlist',
name:'option',
message:'Please choose Rock, paper or scissors:',
choices:['Rock','Paper','Scissors']
};
return new promise(function(resolve,reject)
{
inq.prompt([question1],function(answers)
{
console.log('You chose '+answers.option);
var playerObject = answers.option;
//random with Mersenne Twister API
var r = new rand(rand.engines.mt19937().autoSeed());
var myPlay =r.integer(0,2);
var serverObject ='';
switch(myPlay)
{
case 0:
serverObject='Rock';
break;
case 1:
serverObject ='Paper';
break;
case 2:
serverObject='Scissors';
break;
}
var result='', action='';
//choose winner by using a lodash function!
_.forEach(possibilities,function(e){
if (e[0]==serverObject && e[1] ==playerObject)
{
result=e[2];
action=e[3];
}
});
console.log('I chose ' + serverObject+ "\n")
console.log (result);
if (action=='win') {this.playerScore++;}
if (action=='lose'){this.serverScore++;}
resolve(action);
});
});
};
最佳答案
Promise.coroutine
是一个高阶函数,即它接受一个生成器函数并返回另一个函数,该函数在被调用时将返回您正在寻找的 promise 。正如@robertklep 所说,您甚至没有调用返回的函数。
相反,您应该将完整的方法包装在 Promise.coroutine
中,而不是在方法中调用它。您的代码应如下所示:
var Promise = require('bluebird');
RockPaperScissors.prototype.gameLoop = Promise.coroutine(function*() {
// simple promise test:
// yield this.playGame();
// console.log("The end");
for (var x=0;x<this.maxTurns;x++) {
console.log('Printing '+ x.toString());
var action = yield this.playGame();
}
if (this.playerScore > this.serverScore) {
console.log('Player wins match');
} else {
console.log('Server wins match');
}
});
关于javascript - Bluebird 协程根本不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33712477/
我遇到了一个似乎很独特的问题。我的 NSUbiquitousKeyValueStore 在模拟器中的启动之间根本不起作用。也就是说,我什至不是在谈论 iCloud 同步或类似的东西,我无法让它通过下面
首先,我使用的是 WiX 版本 3.5.2519.0,但我也在最新的 3.6 版本上测试了它,结果相同。 我很难确定 PatchFamily 究竟能过滤掉 torch 生成的差异的某些部分。按照手册中
我可以获取要呈现的“帮助主题”标题,但无法获取我定义的任何FIXTURES。 {{#each model}} 中的任何内容都不会渲染。这是我第一次使用 Ember,所以任何东西(字面意义上的任何东
我一直在尝试设置custom ajaxTransports for jQuery在我们的产品的某些场景下缩短某些工作流程。然而,我在让这些传输受到尊重方面取得了零成功(而我有很多工作 custom a
为什么纯无类型 lambda 演算经常被描述为无法使用? 有了合适的函数库,它会不会与任何其他函数式语言大致相同? 最佳答案 速度不是大问题。例如,您可以决定使用教堂数字但优化实现,以便像往常一样表示
我是一名优秀的程序员,十分优秀!