Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺跳出中的request.post方法_Javascript_Node.js_Promise_Es6 Promise - Fatal编程技术网

Javascript 承诺跳出中的request.post方法

Javascript 承诺跳出中的request.post方法,javascript,node.js,promise,es6-promise,Javascript,Node.js,Promise,Es6 Promise,伙计们: 最近我遇到了一个问题,让我们先看看我的代码: var foo = function () { var promise = new Promise(function (resolve, reject) { request.post( someAddress, { form: someData }, function (error, res, body) {

伙计们:

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

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()
,直接通过
promiseB
promiseC

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

我尝试了一个类似的
setTimeout()

 promiseA
  .then(function(){
     setTimeout(
       chain(),
       400
     );
   })
  .then(promiseB)
  .then(promiseC)
它确实有效,但代码在
chain()
之后停止,并且从不满足
promiseB
promiseC

foo()
将(立即)返回一个表示未来响应值的承诺

如果要等待值变为可用,则需要使用
等待该值。然后()

foo()
将(立即)返回表示未来响应值的承诺

如果要等待值变为可用,则需要使用
等待该值。然后()


您收到了什么错误?这不是一个错误,只是它没有按照我认为应该的方式运行。@Bwaxxlo
chain
也需要返回一个承诺(
return somePromise()…
)。@Cyper这是因为
setTimeout
作为一个函数不会返回任何承诺。所以,
promiseB
只是从
promiseA
@bwaxlo中得到了未定义的信息,我明白了。。。这就是为什么
setTimeout
不起作用的原因!谢谢您收到了什么错误?这不是一个错误,只是它没有按照我认为应该的方式运行。@Bwaxxlo
chain
也需要返回一个承诺(
return somePromise()…
)。@Cyper这是因为
setTimeout
作为一个函数不会返回任何承诺。所以,
promiseB
只是从
promiseA
@bwaxlo中得到了未定义的信息,我明白了。。。这就是为什么
setTimeout
不起作用的原因!谢谢我在另一个函数中使用了after
foo()
中的
.then()
,它似乎不起作用。我在另一个函数中使用了after
foo()
中的
.then()
,它似乎不起作用。
foo().then(body => { ... });