我一直未能获得passport.authenticate在async/await或promise模式下工作.这是一个我认为应该工作的例子,但它无法执行passport.authenticate().
const passport = require("passport");
let user;
try {
user = await __promisifiedPassportAuthentication();
console.log("You'll never have this ", user);
} catch (err) {
throw err;
}
function __promisifiedPassportAuthentication() {
return new Promise((resolve, reject) => {
console.log("I run");
passport.authenticate('local', (err, user, info) => {
console.log("I never run");
if (err) reject(err);
if (user) resolve(user);
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何智慧的圣言都会受到高度赞赏.
关于 SO 的另一个问题激起了我创建一个setTimeout返回 Promise 和 timeId 的兴趣,但又不会破坏向后兼容性。这就是我所指的问题。
_.delay它只是询问方法中的内部 return 语句underscore.js是无关的还是有目的的。这是代码块。
这是 _.delay 的代码:
// Delays a function for the given number of milliseconds, and then calls
// it with the arguments supplied.
_.delay = function(func, wait) {
var args = slice.call(arguments, 2);
return setTimeout(function() { // this is to return the timerId
return func.apply(null, args); // this guy right is in question
}, wait);
};
Run Code Online (Sandbox Code Playgroud)
考虑到 setTimeout 目前不返回 Promise,我提出了这样的想法:它可能是为了将来的证明,以防有一天 setTimeout 返回一个 Promise。
为此, …
正如标题所述,使用React.cloneElementinside React.Children.map会导致元素键发生变化.
这是一个展示这个的沙箱.
React.Children.map(children, (child) => {
let clonedEl = React.cloneElement( child );
console.log(clonedEl);
return clonedEl;
});
Run Code Online (Sandbox Code Playgroud)
该代码块的结果具有.$添加到每个键前面的元素.由于两个原因,这实在令人困惑.
1:文档说cloneElement将保留密钥和引用.
使用element作为起点克隆并返回一个新的React元素.结果元素将具有原始元素的道具,新道具以浅层方式合并.新的孩子将取代现有的孩子.key和ref将保留原始元素.
2:结果console.log是一个保留键和ref的元素...
这会让我相信在React.Children.map代码中的某处发生了添加.
更新:看完React.Children.map的代码后......
我发现它是由以下函数链添加的:mapChilren - > mapIntoWithKeyPrefixInternal - > traverseAllChildren - > traverseAllChildrenImpl - > mapSingleChildIntoContext.
mapSingleChildIntoContext第三个参数是childKey.它被称为nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar内部的第三个参数traverseAllChildrenImpl.
SEPARATOR = "."并getComponentKey在escape函数中返回带有$前缀的键.
更新的问题:
现在我正在寻找解决这个问题的方法...我不确定是否有一个考虑traverseAllChildrenImpl被调用,其中一个空字符串作为nameSoFartraverseAllChildren.
我认为这可能是React.Children.map构建新DOM 的预期行为.在尝试更新动态子项上的道具时,这对我来说是个问题.
解决方案:不要使用不打算使用的东西.
我正在构建一组表单控件,这对开发人员来说非常容易.状态树是通过映射子项和使用来动态构建的.从具有名称的元素描绘字符串名称,以在顶级组件上创建键和值.
顶级表单组件具有用于不同类型控件的onChange处理程序,它们根据需要应用于元素的onChange属性.这个映射是在componentWillMount方法中完成的,这也是导致我出现问题的原因.
将映射移动到render方法允许我不必更新句柄中的子项.句柄中的更新导致元素失去焦点.一切都很好!
当在没有所需道具的情况下开发内部组件时会很快失败,我觉得道具需求检查是在测试中执行的,并且应该从生产代码中排除 propTypes 的附加权重。我说的是不需要用户输入并具有静态道具的组件。
例子:
const Button = ({ label, onClick }) => (
<button type="button" onClick={ onClick }>{ label }</button>
);
Run Code Online (Sandbox Code Playgroud)
在我看来,propTypes 将是此类组件的无关运行时代码。