我有一个foo发出Ajax请求的函数.我怎样才能从中回复foo?
我尝试从success回调中返回值,并将响应分配给函数内部的局部变量并返回该变量,但这些方法都没有实际返回响应.
function foo() {
var result;
$.ajax({
url: '...',
success: function(response) {
result = response;
// return response; // <- I tried that one as well
}
});
return result;
}
var result = foo(); // It always ends up being `undefined`.
Run Code Online (Sandbox Code Playgroud) 最近,向我展示了一段代码,这些代码是在全栈开发人员访谈中被要求的。它涉及创建一个Promise,应聘者应在其中实现,将其传递给resolve函数,然后将2链接起来。
我试图非常天真地实现Promise只是为了使代码正常工作。创建了一个接受解析器函数的ctor,创建了一个then函数,该函数接受一个回调并返回Promise,并简单地在resolver函数上调用该回调。
class MyPromise {
constructor(resolver) {
this.resolver = resolver;
}
then(callback) {
const result = new MyPromise(callback);
this.resolver(callback);
return result;
}
}
promise = new MyPromise(
(result) => {
setTimeout(result(2), 500);
});
promise.then(result => {
console.log(result);
return 2 * result;
}).then(result => console.log(result));
Run Code Online (Sandbox Code Playgroud)
预期结果是2,4-就像在真正的Promise上运行一样。但是我得到了2,2。我在弄清楚如何获取第一个“ then”的返回值并将其传递时遇到了麻烦。
我想创建一个类似Modal的组件,它接收一个打开/关闭的布尔值作为prop,然后将该值存储在组件状态中.关闭Modal时,我想更新close布尔prop,但是在更新组件状态之前等待几秒钟,这样我就可以添加转换类并为退出设置动画.
有了componentWillReceiveProps,我可以通过包装this.setState超时并在此期间添加类来完成此操作.使用新的React 16.3 API,我发现建议使用它getDerivedStateFromProps.
因为getDerivedStateFromProps"应该返回一个对象来更新状态,或者为了指示新的道具不需要任何状态更新",(React docs)我希望该方法看起来像这样:
static getDerivedStateFromProps(nextProps, prevState) {
if (nextProps.menuIsOpen === false && prevState.menuIsOpen === true) {
return setTimeout(() => { menuIsOpen: false}, 1000);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我已经读过,setTimeout它没有返回值,但我想知道是否有一个更优雅的解决方案,而不是返回一个承诺.