我知道两者都是返回函数的函数.
到目前为止,我使用thunk的经验一直在使用它们返回函数而不仅仅是动作对象,这样我就可以使用异步请求Redux.
闭包是一个高阶函数(HOF)的实现,以便为私有变量创建一个新的范围......对吗?HOFs的其他例子包括map,reduce和filter.
有没有其他明确定义两者之间差异的东西?
谢谢.
javascript functional-programming thunk higher-order-functions redux
这是我尝试重构我的代码以正确利用承诺。整个程序是一个基本的网络爬虫。
这样做的挑战是尝试确保 lastStep 可以访问每个页面的 HTML 和 URL,因此我尝试返回一个对象nextStep().
我正在控制台记录 html 并且它已正确返回,但由于某种原因,承诺的记录如下:Promise { <pending> }。为什么会发生这种情况以及如何解决它?
谢谢你!
//Modules being used:
var cheerio = require('cheerio');
var json2csv = require('json2csv');
var request = require('request');
var moment = require('moment');
var fs = require('fs');
//harcoded url
var url = 'http://shirts4mike.com/';
//url for tshirt pages
var urlSet = new Set();
var remainder;
var tshirtArray = [];
const requestPromise = function(url) {
return new Promise(function(resolve, reject) {
request(url, function(error, response, html) {
if(error) return reject(error); …Run Code Online (Sandbox Code Playgroud) 这是一个程序,它从Tshirt网站上删除数据,然后将产品信息写入CSV文件.
有3个刮擦功能和1个写入功能.
现在,我正在寻找一个绝对的噩梦,试图在没有任何第三方库或包的情况下实现如何实现承诺.只有ES6的原生功能才有可能吗?
由于请求的异步性质,我需要在调用下一个函数之前完成每个函数及其请求.这样我就可以使用urlSet下一个函数中的变量.
如何在不重写整个代码的情况下完成此操作?
我应该提一下,这些功能中的每一个都是单独工作的,它们都经过多次测试.
每项职能是否都成为个人承诺?
代码如下,谢谢:
//TASK: Create a command line application that goes to an ecommerce site to get the latest prices.
//Save the scraped data in a spreadsheet (CSV format).
'use strict';
//Modules being used:
var cheerio = require('cheerio');
var json2csv = require('json2csv');
var request = require('request');
var moment = require('moment');
var fs = require('fs');
//harcoded url
var url = 'http://shirts4mike.com/';
//url for tshirt pages
var urlSet = new Set();
var remainder;
var tshirtArray …Run Code Online (Sandbox Code Playgroud) 我正在建立一个Twitter界面,我想显示Twitter本身的时间.
我执行GET请求并抓取推文,然后将其传递给我moment.js以进行转换.
这是一个代码片段:
client.get('direct_messages', {screen_name: 'theclearytheory', count: '3'}, function(error, messages, response){
if(!error){
var privateMessageTime = [];
for(var i=0; i < messages.length; i++){
console.log(messages[i].created_at);
privateMessageTime.push(moment(messages[i].created_at).fromNow());
}
} else {
console.log(error)
}
Run Code Online (Sandbox Code Playgroud)
现在,这个工作正常.如果我回来,Sun Oct 02 11:59:43 +0000 2016那么程序正确地将其转换为:2 months ago.
问题是我在控制台中收到此警告消息:
弃用警告:提供的值不是公认的ISO格式.时刻构造回落到js Date(),这在所有浏览器和版本中都不可靠.不鼓励使用非ISO日期格式,并将在即将发布的主要版本中删除.有关更多信息,请参阅http://momentjs.com/guides/#/warnings/js-date/.参数:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: Fri Jul 22 10:19:18 +0000 2016, _f: undefined, _strict: undefined, _locale: [object Object]
我已经浏览了它链接到的文档,但我无法弄清楚如何使用它.如果有人对此有任何经验(或者比我更聪明),我真的很感激任何帮助!
我正在使用 node/express/mongo 并尝试运行测试来查找具有特定 id 的帖子。
这是我的路线:
app.get('/api/posts/:id', PostController.getPost);
Run Code Online (Sandbox Code Playgroud)
这是控制器:
getPost(req, res, next) {
const postId = req.params.id;
Post.findById({ _id: postId })
.then(user => res.send(user))
.catch(next);
},
Run Code Online (Sandbox Code Playgroud)
这是测试:
describe('Post Controller', () => {
it('find a post with a particular id', (done) => {
const post = new Post({
text: 'This is a post',
voteCount: 0,
commentCount: 0,
createdAt: 0,
expiresAt: 0
});
post.save().then(() => {
console.log(post._id);
request(app)
.get(`api/posts/${post._id}`)
.set('Accept', 'application/json')
.expect(200)
.end((err, res) => {
console.log(res);
if (err) return done(err);
//assert(response.body.obj.firstName …Run Code Online (Sandbox Code Playgroud)