你有一个原型对象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".
如果你不能修改方法调用(包括传入你的回调函数),你如何将默认回调传递给这些方法调用?
一些想法:
用装饰器包裹"bob"(如何实现仍然模糊,可以用一个小例子)
修改构造函数以指定默认回调(如果没有分配)(未考虑是否可能)
使用生成器包装器将继续调用next方法,直到没有剩下?
我试图以下列方式将多个动作链接在一起:
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文档的模式匹配,很快就被我正在创建的函数所淹没
非常感谢您的反馈!
我正在尝试创建一个测试,使用 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 类?
我有一系列字典。每个字典都有一个“id”作为其键,并附加一个相应的列表。
我想迭代字典列表并访问每个字典值中的第一个列表项。
作为一个想法,数据结构如下:
[ {"abc": [1,2,3]}, {"def":[4,5,6]} ]
Run Code Online (Sandbox Code Playgroud)
我想迭代并得到 [1,4]
我使用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)
我正在尝试向原型添加"默认回调",如果没有提供,则会将异步方法的回调函数(以promise的形式)分配给异步方法.
目标是让一个类的异步方法链同步运行
Item.async1().async2()....asyncN()
Run Code Online (Sandbox Code Playgroud)
请注意,异步函数本身期望回调,但它们不会在函数调用中作为参数传递(这告诉我在回调查找失败时类需要默认行为)
Spec声明我无法直接修改原型方法的行为或副作用.我可以添加原型方法.我们无法了解这些原型方法的实现方式.
TLDR:如果不修改原型方法,如何链接N个异步方法并确保它们按顺序运行?
顺便说一下:如果我想实现promisified版本,那么宣传有问题的原型方法会很有帮助,但看起来我们受限于原始的函数调用
[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)
这种疯狂的任何方法?
我们正在运行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 ×6
asynchronous ×2
redux ×2
algorithm ×1
callback ×1
dom ×1
es6-promise ×1
generator ×1
math ×1
mergesort ×1
node.js ×1
promise ×1
python ×1
python-2.7 ×1
react-redux ×1
reactjs ×1
recursion ×1
redux-thunk ×1
sorting ×1