相关疑难解决方法(0)

如何从异步调用返回响应?

我有一个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)

javascript ajax jquery asynchronous xmlhttprequest

5208
推荐指数
38
解决办法
134万
查看次数

简单的承诺然后实现

最近,向我展示了一段代码,这些代码是在全栈开发人员访谈中被要求的。它涉及创建一个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”的返回值并将其传递时遇到了麻烦。

javascript promise

7
推荐指数
1
解决办法
203
查看次数

如何将React的getDerivedStateFromProps与setTimeout一起使用?

我想创建一个类似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它没有返回值,但我想知道是否有一个更优雅的解决方案,而不是返回一个承诺.

javascript settimeout reactjs

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