小编Ant*_*ung的帖子

链接异步方法调用 - javascript

你有一个原型对象Foo有两个异步方法调用,bar和baz.

var bob = new Foo()

Foo.prototype.bar = function land(callback) {
  setTimeout(function() {
    callback()
    console.log('bar');
  }, 3000);
};

Foo.prototype.baz = function land(callback) {
  setTimeout(function() {
    callback()
    console.log('baz');
  }, 3000);
};
Run Code Online (Sandbox Code Playgroud)

我们想做bob.bar().baz()并按顺序记录"bar"和"baz".

如果你不能修改方法调用(包括传入你的回调函数),你如何将默认回调传递给这些方法调用?

一些想法:

  1. 用装饰器包裹"bob"(如何实现仍然模糊,可以用一个小例子)

  2. 修改构造函数以指定默认回调(如果没有分配)(未考虑是否可能)

  3. 使用生成器包装器将继续调用next方法,直到没有剩下?

javascript asynchronous generator callback es6-promise

14
推荐指数
2
解决办法
1万
查看次数

在Redux中链接多个异步调度

我试图以下列方式将多个动作链接在一起:

A.将用户数据发布到数据库

B.使用发布的数据查询Elasticsearch的结果

(我并行做A和B)

B1.使用ES的结果,从两个表B2查询原始数据库的结果.导航到新页面并更新UI

我现在正在使用thunks来推断我的代码,但我也发现这个异步模式非常冗长:

export function fetchRecipes(request) {
  return function(dispatch) {
    dispatch(requestRecipes(request))    
    return fetch(url)
      .then(response => response.json())
      .then(json => dispatch(receiveRecipes(request, json))
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

这个,以及"requestRecipes"和"receiveRecipes",因为其他动作创建者似乎只是为了进行一次异步调用.(请求,接收和获取功能)

总结:当你链接2-3个异步动作时,它们的输出相互依赖(我需要在可能的情况下进行宣传),是否有更有效的方法可以不为每个异步调用编写3个函数?

我认为必须要有办法.我是Redux文档的模式匹配,很快就被我正在创建的函数所淹没

非常感谢您的反馈!

reactjs redux redux-thunk

9
推荐指数
1
解决办法
3914
查看次数

使用 classList 检查 body 中的类

我正在尝试创建一个测试,使用 vanilla JS 检查特定类的网页正文

目前我的代码看起来像这样

var whole = document.getElementsByTagName("body")[0];
whole.classList.contains("desiredClass");
Run Code Online (Sandbox Code Playgroud)

即使它存在于我的身体中,这也会在类上返回“false”。

我试图将整体重新定义为

var whole = document.body
Run Code Online (Sandbox Code Playgroud)

并收到相同的结果

问题:我的代码缺少什么?我觉得这是一个非常简单的测试,但我肯定遗漏了一些东西

编辑:

我的 classList 函数可以工作,但没有在主体内搜索 DIV 类。

如何缩小 document.body 中的搜索范围以搜索所有 div 类?

javascript dom

5
推荐指数
1
解决办法
7571
查看次数

python:从列表中获取第一个值作为字典中的值

我有一系列字典。每个字典都有一个“id”作为其键,并附加一个相应的列表。

我想迭代字典列表并访问每个字典值中的第一个列表项。

作为一个想法,数据结构如下:

[ {"abc": [1,2,3]}, {"def":[4,5,6]} ]
Run Code Online (Sandbox Code Playgroud)

我想迭代并得到 [1,4]

python python-2.7

5
推荐指数
1
解决办法
2万
查看次数

Math.pow的JavaScript实现

我使用log(n)解决方案实现了Math.pow,就像geeksforgeeks上的这篇文章一样

http://www.geeksforgeeks.org/write-ac-program-to-calculate-powxn/

但是,我发现函数没有按照我的意图退出它的基本情况.这个程序似乎适用于C而不是JS.

因此,我得出的结论是,我假设在JavaScript中有一些关于C的东西.

我的JavaScript实现中缺少什么?

预先警告:代码片段将超出最大调用堆栈错误

var myPow = function(x, n) {
  var res = 1
  var temp;
  if (n === 0) {
    return 1;
  }
  temp = myPow(x, n / 2)
  if (n % 2 === 0) {
    return temp * temp
  } else {
    return x * temp * temp
  }
};

console.log(myPow(2,3));
Run Code Online (Sandbox Code Playgroud)

javascript algorithm math recursion

5
推荐指数
1
解决办法
2251
查看次数

JS - 链序异步方法依次没有回调或修改

我正在尝试向原型添加"默认回调",如果没有提供,则会将异步方法的回调函数(以promise的形式)分配给异步方法.

目标是让一个类的异步方法链同步运行

Item.async1().async2()....asyncN()
Run Code Online (Sandbox Code Playgroud)

请注意,异步函数本身期望回调,但它们不会在函数调用中作为参数传递(这告诉我在回调查找失败时类需要默认行为)

Spec声明我无法直接修改原型方法的行为或副作用.我可以添加原型方法.我们无法了解这些原型方法的实现方式.

TLDR:如果不修改原型方法,如何链接N个异步方法并确保它们按顺序运行?

顺便说一下:如果我想实现promisified版本,那么宣传有问题的原型方法会很有帮助,但看起来我们受限于原始的函数调用

javascript asynchronous node.js promise

4
推荐指数
1
解决办法
1987
查看次数

Javascript的本机排序方法如何工作?

[1, false, 10, "b", 3, "33", ":", "R", "^"].sort()
Run Code Online (Sandbox Code Playgroud)

产量如下:

[1, 10, 3, "33", ":", "R", "^", "b", false]
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释排序方法如何工作?我猜它必须将所有内容翻译成ASCII.

当我这样做时,情节会变浓

[1, false, 10, "b", 3, "33", ":", "R", "^"].sort(function(a,b) {return b-a})
Run Code Online (Sandbox Code Playgroud)

输出以下内容:

[10, 1, false, "b", "33", 3, ":", "R", "^"]
Run Code Online (Sandbox Code Playgroud)

这种疯狂的任何方法?

javascript sorting mergesort

3
推荐指数
1
解决办法
205
查看次数

redux中间件->拦截/阻止/转换?

我们正在运行SPA。分派的操作(不是组件)是基于身份验证的。

是否可以拦截和转换调度的动作?

dispatch({
    type: 'FOO',
    payload: { some: value }
})

function magicMiddleware(action) => decide if authorized. 
if no...

dispatch({
    type: 'BAR',
    payload: { new: value }
})

else continue
Run Code Online (Sandbox Code Playgroud)

请注意,'FOO'绝不能击中减速器

javascript redux react-redux redux-middleware

3
推荐指数
1
解决办法
1365
查看次数