如何在Promise中包装对象? [英] How to wrap object in a Promise?

查看:82
本文介绍了如何在Promise中包装对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个代码,用于在内存存储中搜索某些数据,如果没有找到,则在服务器上搜索该数据并将其缓存在内存中。
如何将对象作为Promise返回,以便调用者可以在其上调用done?

I have a code that searches for some data in memory storage and if not found searches that data on server and caches it in memory. How can I return an object as a Promise so that the caller can just invoke a "done" on it?

if (foundInLocalStorage)
    {
    // This part I cannot make to work, caller does not have its 'done' fired
        var defered = $.Deferred();
        defered.resolve();
        defered.promise(dataFound);
    }
    else
    {
        return $.ajax
            (
            {
                url: someUrl,
                dataType: 'json',
                data: { id: 101 }
            }
            )

            .done
            (
//That part is fine
              ......

            );
    }


推荐答案

你需要回复一个承诺

if (foundInLocalStorage) {
    var defered = $.Deferred();
    defered.resolve(dataFound);//resolve the promise with the data found
    //or setTimeout(defered.resolve.bind(promise, 5)); if you want to maintain the async nature
    return defered.promise();//return a promise

} else {
    return $.ajax({
        url: someUrl,
        dataType: 'json',
        data: {
            id: 101
        }
    }).done(
    //That part is fine
    ......

    );
}

这篇关于如何在Promise中包装对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆