繁体   English   中英

Promise中的request.post方法跳出来

[英]request.post method in a Promise jump out

球员:

最近我想出了一个问题,让我们先看看我的代码:

var foo = function () {
    var promise = new Promise(function (resolve, reject) {

        request.post(
            someAddress,
            { form: someData },

            function (error, res, body) {

                responseHandler(error, res, body, resolve, reject);
            });
    });

    return promise;
};

function responseHandler(error, res, body,resolve,reject) {
    if (error || res.statusCode != 200) {
        try {
            if (res) {
                error = error || { error: res.statusMessage };
                error.statusCode = res.statusCode || 204;
                reject(error);
            }
            else {
                reject({
                    statusCode: 204,
                    message: 'Unspecified Error'
                });
            }
        }
        catch (ex) {
            reject(ex);
        }
    }
    else {
        try {
            resolve(body ? JSON.parse(body) : '')
        }
        catch (ex) {
            reject(ex);
        }
    }
}

所以这是我的代码。 当它运行到request.post ,它会跳出foo。

  • 这个问题是由我编码错误造成的还是我遗漏了什么?

  • 我希望它留下并等待响应,以便我可以运行foo() ,我该怎么办?


实际上,整个代码将是:

function bar() {
 var promise = new Promise(function(resolve, reject) {
  foo().then(doSth and resolve);
 })
  return promise;
 }

然后我用bar的地方与其他承诺,如:

   function chain() {
     somePromise()
      .then(bar)
      .then(anotherPromise)
      .then(...);
   }

最后它随之而来

 promiseA
  .then(chain)
  .then(promiseB)
  .then(promiseC)

当我的代码在bar()运行并潜入foo() ,它会发布一些东西并跳出chain()并直接通过promiseBpromiseC

只有在收到响应时,代码才会返回到responseHandler()

我试过像setTimeout()一样

 promiseA
  .then(function(){
     setTimeout(
       chain(),
       400
     );
   })
  .then(promiseB)
  .then(promiseC)

它确实有效,但代码在chain()之后停止,并且永远不会遇到promiseBpromiseC

foo()将(立即)返回一个promise,它表示未来的响应值。

如果要等待值可用,则需要使用.then()等待它:

foo().then(body => { ... });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM