"承诺是在处理程序中创建的,但未从它返回"

时间:2017-01-04 02:34:51

标签: javascript promise bluebird

当用户点击按钮(#lfdsubmit)时,它会调用应返回promise的函数(LFD_SearchContainer())。但错误发生在

LFD_SearchContainer('EISU1870725')
.then(container => {
  ST2.db2(container);
})

有什么问题? 代码:(不要完全信任注释掉的部分来指导您完成这些代码 - 我忘了更新其中一些代码)

函数LFDTrack(){

function LFD_SearchContainer (requestedContainer) {
    return new Promise((resolve, reject) => {
        let lfd_scanparams = { TableName: 'lfd_table1' }
        db.scan(lfd_scanparams, (err, containers) => {
            if (err) {
                reject(err);
            } else {
                containers = containers.Items;

                let requestedContainers = []; // different variable than arg

                let containerObject; // this will be the resolved object

                // this will return the object of the searched container
                let findIt = _.forEach(containers, container => {
                    if (container.container === requestedContainer) {
                        containerObject = container;
                    }
                });
                containerObject = findIt[0];
                //console.log(findIt[0]);
                resolve(containerObject.container);
            }
        });
    });
}

$(function() {
    $("#lfdsubmit").click(function (e) {
        e.preventDefault();

        let lsd_modaltitle = $("#lfdmodaltitle");
        let lsd_modalcontent = $("#lfdmodalcontent");

        LFD_SearchContainer('EISU1870725')
        .then(container => { 
            ST2.db2(container); // will send the object
        })
        .catch(error => {
            console.log(error);
        });
    });
});

}

1 个答案:

答案 0 :(得分:1)

如果ST2.db2(container);返回承诺,则需要将该行更改为

return ST2.db2(container);

如果没有,你可以将return null;置于其后面,如下所示:

ST2.db2(container);
return null;

由于您没有提供ST2的定义,我无法知道db2方法是否返回承诺。 :)

该错误由bluebird here的作者解释。