如何从包含承诺链的常规javascript函数返回值? [英] How to return a value from a regular javascript function that contains a promise chain?

查看:73
本文介绍了如何从包含承诺链的常规javascript函数返回值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

function bsfir() {
    Parse.Promise.as().then(function() {
        return Parse.Cloud.run('gRFI', {});
    }).then(function(gRFIr) {
        return Parse.Cloud.run('gFI', { });
    }).then(function(gFIR) {
        return gFIR;
    }, function(error) {
        return error;
    });
}

Parse.Cloud.define("bSFI", function(request, response) {
    Parse.Promise.as().then(function() {
        return bsfir();
    }).then(function(bsfirr) {
        response.success(bsfirr);
    }, function(error) {
        response.error("219 error: " + JSON.stringify( error));
    });
});

目标是在将执行交还给调用方(在本例中为bSFI())之前,先完成bsfir()的执行(即解决承诺).

The goal is to have bsfir() complete execution (i.e. resolve the promise) before handing execution back to the caller, in this case, bSFI().

调用bSFI()导致仅执行bsfir()中的几行代码. bSFI()的执行几乎立即/立即完成,可能是因为bsfir()中的诺言没有绑定到返回值,所以当bSFI()调用bsfir()时,执行立即转到response.success(bsfirr);

Calling bSFI() results in executing only a few lines of code in bsfir(). The execution of bSFI() completes almost immediately/instantaneously probably because the promise in bsfir() isn't tied to a return value so when bSFI() calls bsfir(), execution immediately goes to response.success(bsfirr);

bsfir()中使用Promise.all()是一个好的解决方案吗?

Is using Promise.all() in bsfir() a good solution?

推荐答案

否,您不能等到诺言解决后再返回.您的任务是异步的,但是return必须立即发生.

No, you cannot wait for the promise to resolve before you return. Your task is asynchronous, but the return must happen immediately.

但是您可以做的就是简单地(从您自己)返回承诺,并让您的呼叫者等待.实际上,您的bSFI()无论如何已经使用了promise,因此集成起来很简单.

But what you can do is to simply return the promise (from your) itself, and allow your caller to wait for it. In fact, your bSFI() already uses promise anyway, so it is trivial to integrate.

function bsfir() {
    return Parse.Promise.as().then(function() {
//  ^^^^^^
        return Parse.Cloud.run('gRFI', {});
    }).then(function(gRFIr) {
        return Parse.Cloud.run('gFI', {});
    });
}

Parse.Cloud.define("bSFI", function(request, response) {
    Parse.Promise.as().then(bsfir).then(function(bsfirr) {
        response.success(bsfirr);
    }, function(error) {
        response.error("219 error: " + JSON.stringify( error));
    });
});

请注意,在两个功能中,您都应该可以将Parse.Promise.as().then(…)替换为…().

Notice that you should be able to replace Parse.Promise.as().then(…) by just …() in both functions.

这篇关于如何从包含承诺链的常规javascript函数返回值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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