Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.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 我在这里拒绝承诺有什么错?_Javascript_Node.js_Request_Request Promise - Fatal编程技术网

Javascript 我在这里拒绝承诺有什么错?

Javascript 我在这里拒绝承诺有什么错?,javascript,node.js,request,request-promise,Javascript,Node.js,Request,Request Promise,所以我在这里为node编写了一些可重用的代码,并通过async/await应用它。虽然我相信我在这里工作时会有很多误解。。。但是,我发誓,我有一个项目,我正在使用这段代码,它是有效的,而另一个项目,它没有。 Im使用请求和请求承诺 UrlRequest: function( opts ) { return new Promise( (resolve, reject) => { request( opts, function(error, r

所以我在这里为node编写了一些可重用的代码,并通过async/await应用它。虽然我相信我在这里工作时会有很多误解。。。但是,我发誓,我有一个项目,我正在使用这段代码,它是有效的,而另一个项目,它没有。 Im使用
请求
请求承诺

UrlRequest: function( opts ) {
    return new Promise( (resolve, reject) => {
        request( opts, 
            function(error, request, body) {
                if (error) 
                    reject( {error: true, msg: error} );
                else
                    resolve( {body, request} );
            });
        })
        .catch(err => reject( {error: true, msg: err} ));
    }

我相当肯定
.catch()
是错误的。但在我的第一个项目中没有出错。所以我想找出正确的方法。在我读过的几篇文章中,我提出了这个函数的用法。我还知道如果实际发生任何错误(包括本例),它将抛出
未处理的PromisejectionWarning
错误。那么这是如何正确处理的呢

我如何使用它:

(async () => {
var result = await Promise.UrlRequest( {
    url: "...",
    method: "GET",
    headers: DefaultHeaders
    } );

// do stuff with result... 

}) ();

使用
请求承诺
,您不需要编写自己的
承诺
包装器

// make sure you're using the promise version
const request = require('request-promise')

var opts = {
  ...
  resolveWithFullResponse: true    //  <---  <--- to get full response, response.body contains the body
};

// if you dont plan to use UrlRequest as constructor, better name is starting with lowercase: urlRequest, some naming convention
UrlRequest: async function( opts ) {
  let res;
  try {
    res = await request(opts);
  } catch (e) {
    // handle error
    throw e
  }
  return res;
}
//确保您使用的是promise版本
const request=require('request-promise')
变量选项={
...

resolveWithFullResponse:true/使用
请求承诺
,您不需要编写自己的
承诺
包装器

// make sure you're using the promise version
const request = require('request-promise')

var opts = {
  ...
  resolveWithFullResponse: true    //  <---  <--- to get full response, response.body contains the body
};

// if you dont plan to use UrlRequest as constructor, better name is starting with lowercase: urlRequest, some naming convention
UrlRequest: async function( opts ) {
  let res;
  try {
    res = await request(opts);
  } catch (e) {
    // handle error
    throw e
  }
  return res;
}
//确保您使用的是promise版本
const request=require('request-promise')
变量选项={
...

resolveWithFullResponse:true/因为您已经安装了
请求承诺
,您不需要在执行时构建
承诺。只需使用it而不是
请求
,您就可以返回承诺。类似于此的操作应该可以:

const request = require('request-promise')

request(opts)
    .then((res) => {
        // Process res...
    })
    .catch((err) => {
        // Handle error...
    });
您可以继续将其包装在
UrlRequest
函数中,并与
async
一起使用,如下所示:

UrlRequest: async ( opts ) => {
  try {
    const response = await request(opts);
    return response;
  } catch (error) {
    // Handle error
  }
}
如果要使用
then()
catch()
,可以执行以下操作:

UrlRequest: ( opts ) => {
  return request(opts)
            .then(response => response)
            .catch (error) {
              // Handle error
            }
}

由于您已经安装了
request-promise
,因此您不需要像现在这样构造
promise
。只需使用it而不是
request
,您就可以返回一个promise。类似于此的操作应该可以:

const request = require('request-promise')

request(opts)
    .then((res) => {
        // Process res...
    })
    .catch((err) => {
        // Handle error...
    });
您可以继续将其包装在
UrlRequest
函数中,并与
async
一起使用,如下所示:

UrlRequest: async ( opts ) => {
  try {
    const response = await request(opts);
    return response;
  } catch (error) {
    // Handle error
  }
}
如果要使用
then()
catch()
,可以执行以下操作:

UrlRequest: ( opts ) => {
  return request(opts)
            .then(response => response)
            .catch (error) {
              // Handle error
            }
}

如果您使用的是请求承诺,为什么要从请求手动创建承诺?为您做到这一切——正确地——是请求承诺的重点。我本以为请求承诺请求不会接受回调
未处理的PromisejectionWarning错误。那么如何正确处理此问题呢?
使用try/catch块你不在
var result=wait Promise.UrlRequest
中尝试同时使用回调和
catch()
。据我所知,没有任何形式的
request()
支持这一点。对于
request()
库,它将只是回调。对于
request-Promise())
library,它将只有
.then()
.catch()
,根本没有回调。@jfriend00:对不存在的
拒绝的缩进和引用是误导性的;
.catch()
新承诺(…)
。如果您使用请求承诺,为什么要从请求手动创建承诺?正确地为您执行所有这些操作是请求承诺的重点。我本以为请求承诺请求不会接受回调
未处理的PromisejectionWarning错误。那么如何正确处理此问题?
使用try/catch块,您在
var result=wait Promise.UrlRequest
中没有使用回调和
catch()
。据我所知,没有任何形式的
request()
支持这一点。对于
request()
库,它将只是回调。对于
request-Promise()
库,它只有
.then()
.catch()
,根本没有回调。@jfriend00:对不存在的
拒绝
的缩进和引用是误导性的;
.catch()
新承诺(…)
上。放置
.then()
.catch()会引起任何问题吗
在我的UrlRequest函数中?它是一个模块,将在几个项目中重复使用。但是感谢But用例!不,它不会导致任何问题。您可以使用
then()
catch()
而不是try-and-catch块。放置
.then()
catch()会导致任何问题吗
在我的UrlRequest函数中?它是一个将在几个项目中重复使用的模块。但是感谢But用例!不,它不会导致任何问题。您可以使用
then()
catch()
而不是try-and-catch块。