Tag: 保证

Node + Promise + Phantom.JS – 奇怪的错误

我使用Node和npm幻影制作了很多网页的截图。 为了节省CPU,我为每个进程使用一个Phantom实例。 在这种情况下,我打开一个页面,渲染它,closures它并继续。 除了当我开始另一个进程时,这个工作真的很棒。 在这种情况下,我得到这个错误,当一个过程完成时: UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:2):错误:undefined不是一个对象(评估'target [command.params [0]]') 幻影实例: function initPhantom(todos) { phantom.create(['–ignore-ssl-errors=no'], {logLevel: 'error'}) .then(function (instance) { var processId = instance.process.pid; console.log("===================> instance: ", processId); phInstance = instance; webshot(0, todos); }); } 通过URL循环: function webshot(id, shots) { phInstance.createPage().then(function (_page) { sitepage = _page; sitepage.property('viewportSize', {width: 1024, height: 768}); WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 […]

在Javascript中caching和预取过期的承诺

承诺是我在JavaScript中pipe理我的asynchronous代码的首选方式。 Memoize(npm上的memoizee)是一个Javascript库,用于轻松caching和预取函数的结果。 理想情况下,我想结合两者中的优点,并有能力“超期”承诺并预先获取新的Promise结果(当caching被触摸并即将到期时)。 Memoize可以做到这一点,但它不是build立在Promise的基础上。 (我知道Promise有一个内置的“永久caching”,就像它们的本质一样,但是对于我的应用来说永远太长了) 我迄今为止做的最好的尝试如下(使用蓝鸟 , memoize和下划线的 node.js示例): var memoize = require('memoizee') , Promise = require('bluebird') , _ = require('underscore') ; // returns a memoized Promise-generating function function memoizePromiser(funcReturningPromise, options) { var opts = _.defaults(options || {}, {async: true}); return Promise.promisify(memoize(function(){ var args = _.initial(arguments); var cb = _.last(arguments); funcReturningPromise.apply(this, args).nodeify(cb); }, opts)); }; […]

child_process.exec / spawn使用npm install命令(通过Gulp / Shipit)触发callback/closures

我正在使用Shipit进行部署。 在部署时,Shipit将当前的Git Sha检查到一个tmp目录,然后运行npm install ,然后执行gulp build ,然后继续部署。 Shipit使用Orchestrator来完成任务stream程,就像Gulp一样。 Shipit有它自己的CLI,所以我可以使用shipit development deploy 。 上面的所有东西都起作 我想要做的是创build一个gulp deploy任务,将直接初始化Shipit,而不是使用CLI。 看起来像这样: gulp.task('shipit:deploy', function() { var deployToEnv = argv['deploy-to'] || false; var shipit; return inquirer.prompt([{ type: 'list', name: 'deployToEnv', default: deployToEnv, message: 'Deploy to environment:', choices: envs }]).then(function(answers) { deployToEnv = answers.deployToEnv; shipit = new Shipit({environment: deployToEnv}); shipit.initialize(); shipit.start('deploy'); }); }); […]