如何在打字稿中取消回调地狱

时间:2016-05-20 18:47:56

标签: typescript callback

我知道回调地狱很糟糕,但我无法在打字稿中解决这个问题。 如果我想删除一个类别:

首先检查类别是否存在 第二次检查类别是否为父?

如果有更新类别的父子集合

最后回调控制器向客户端发送消息。

任何人都可以帮助我吗? 这是我的方法代码:

removeCategory(catId: string, callback: (error: any, result: any) => void) {
    var msg = {
        "message": "",
        "statescode": 200,
        "error": null
    };
    console.log("find category");
    if (catId) {
        super.findById(catId, (getError: any, getEntity: any) => {
            if (getError) {
                msg.message = "can't find this item: " + catId;
                msg.statescode = 404;
                msg.error = getError;
                callback(msg, null);
            } else {
                console.log("find category");
                super.remove(catId, (delError: any, delEntity: any) => {
                    if (delError) {
                        msg.message = "something wrong with remove this category: " + getEntity.name;
                        msg.statescode = 400;
                        msg.error = delError;
                        callback(msg, null);
                    }
                    else {
                        if (getEntity.parent) {
                            var parentId = getEntity.parent;

                            super.update(parentId, { $pull: { childrens: getEntity._id } }, (putError: any, putEntity: any) => {
                                if (putError) {
                                    msg.message = "can't update this item:" + item.name;
                                    msg.statescode = 500;
                                    msg.error = putError;
                                    callback(msg, null);
                                }
                                else {
                                    callback(null, getEntity);
                                }
                            });
                        } else {
                            callback(null, getEntity);
                        }
                    }
                });
            }
        });
    }
    else {
        msg.message = "entityId can't be empty!";
        msg.statescode = 400;
        callback(msg, null)
    }
}

2 个答案:

答案 0 :(得分:1)

在Typescript 2.0中有关于Async Functions的提案可能对您有所帮助,您可以继续关注它。

您现在也可以查看Async.js library,在这种情况下也会有所帮助。

希望这会有所帮助!!

答案 1 :(得分:1)

在mongoose中使用promise可以解决这个问题。 这是代码:

angular
        .module('app')
        .service('myDataService', myDataService);
myDataService.$inject = ['ngResource'];

function myDataService($resource) {
    var self = this;
    self.MyData = $resource(myURL, {}, {
        query: { method: 'GET', isArray: true }
    });

}