Javascript 不能使用承诺

Javascript 不能使用承诺,javascript,node.js,promise,Javascript,Node.js,Promise,我试图在node中使用承诺 但是,当时的部分没有被执行。 第一个函数返回一个resolve()实例。 我怎样才能解决这个问题 代码如下: exports.refresh_access_token = function (environment_hash) { ... Model.update(values, {where: where}).then(function () { console.log('updated!'); resolve("

我试图在node中使用承诺

但是,当时的部分没有被执行。 第一个函数返回一个resolve()实例。 我怎样才能解决这个问题

代码如下:

exports.refresh_access_token = function (environment_hash) {

    ...

    Model.update(values, {where: where}).then(function () {
        console.log('updated!');
        resolve("Success!");

    }).catch(function (err) {
        console.log('error on update');
    });

    ...

}

async.map(accounts, function (account) {
    module.exports.refresh_access_token(account.environment_hash).then(function () {
        console.log('async called back');
    });
}

您需要兑现承诺,才能使用
,然后


返回模型。更新(…)

您的问题不是100%清楚,但有几个错误可以修复:

  • 若要让调用方知道内部承诺何时完成,您必须返回该承诺。因此,将
    return
    添加到
    return
    Model.update(…)`

  • resolve()。事实上,这可能会导致抛出异常,因为未定义
    resolve

  • 当您在
    .then()
    处理程序中时,原来的承诺已经解决。你不需要解决任何问题。要返回一个值作为父承诺的解析值,只需返回该值即可

  • 当您从
    .catch()
    处理程序中登录时,如果希望主机承诺保持拒绝状态,则必须重新抛出错误。否则,错误将被“处理”,承诺将更改为已解决

  • 然后,在您的第二个代码块中,将
    async
    库与promissions混合使用是没有意义的。它们是管理异步操作的不同方法。选择一种方案或另一种方案——不要混用。如果你已经有了像你这样的承诺,那么你可以回报这个承诺,让打电话的人使用这个承诺。当您已经有承诺时,无需使用
    async

  • 您可以这样修复这些问题:

    exports.refresh_access_token = function (environment_hash) {
    
        ...
    
        return Model.update(values, {where: where}).then(function () {
            console.log('updated!');
            return "Success!";
    
        }).catch(function (err) {
            console.log('error on update');
            // after logging, make sure promise stays rejected
            throw err;
        });
    
        ...
    
    }
    

    我添加了返回模型,但仍然没有任何结果。每次使用承诺时,您都需要返回它,以便调用函数可以等待它,对于您显示的代码,它应该可以工作,可能您没有显示的代码中存在问题我编辑了代码。我在async.map函数中调用该函数。因为我想为parellel中数据库的每个元素运行一个特定的进程(refresh_access_token函数),然后仅当refresh_access_token完成@user3
    时才执行另一个进程,第一个函数返回一个resolve()实例
    什么是resolve实例?它只是resolve('suces');行但是什么是
    解析
    ?它没有特殊的内置含义,也没有在代码中定义。我只是遵循这个:它使用resolve('Success!');在其中一个示例中,该示例中的resolve是一个回调,它告诉promise如何解析。它不是一个全局变量。您的示例将抛出一个异常。谢谢您的帮助,但它仍然不起作用。我想为parellel(刷新\访问\令牌函数)中数据库的每个元素运行特定的进程然后,仅当刷新\u访问\u令牌finished@FilipeFerminiano-当您只包含这么多代码,并且没有详细说明出现问题的具体位置时(例如,解释您已经完成的调试和故障排除),我们没有办法帮助您解决更大的问题。您刚才描述了一大堆与问题中的代码完全无关的东西。我们正在尽最大努力使用您显示的代码和提供的描述。见鬼,我已经给了你四件事要在这么多代码中修复。在这里,我们没有什么可以做的了。好的,谢谢你的回答。我想帮你解决我的问题。但我对这样做的承诺知之甚少。我只知道代码没有像我预期的那样工作。我将对此进行更多的研究,并检查我是否走上了正确的道路。我接受你的回答,作为对你帮助的感谢。是的,对不起,这会消除噪音:p