Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 在我的代码中尝试使用Wait with promise-如何?_Javascript_Node.js_Async Await_Es6 Promise - Fatal编程技术网

Javascript 在我的代码中尝试使用Wait with promise-如何?

Javascript 在我的代码中尝试使用Wait with promise-如何?,javascript,node.js,async-await,es6-promise,Javascript,Node.js,Async Await,Es6 Promise,我已经尝试过了,但未能清楚地理解javascript是如何承诺和等待工作的!我设法拼凑出一个函数来执行我在node.js微服务中需要的功能,但我不确定我是否以正确(最佳)的方式完成了它。此外,我使用promise实现了我想要的,而且我还没有对我的代码进行任何广泛的测试,以查看它是否确实按照我认为的方式运行。以下是我目前拥有并运行的代码,但我不确定我是否缺少使用Wait以正常运行: const QryAllBooks = { type: new GraphQLList(Book

我已经尝试过了,但未能清楚地理解javascript是如何承诺和等待工作的!我设法拼凑出一个函数来执行我在node.js微服务中需要的功能,但我不确定我是否以正确(最佳)的方式完成了它。此外,我使用promise实现了我想要的,而且我还没有对我的代码进行任何广泛的测试,以查看它是否确实按照我认为的方式运行。以下是我目前拥有并运行的代码,但我不确定我是否缺少使用Wait以正常运行:

  const QryAllBooks = {
        type: new GraphQLList(BookType),
        args: {},
        resolve(){
              return new Promise((resolve, reject) => {
                 let sql = singleLineString`
                      select distinct t.bookid,t.bookname,t.country
                      from books_tbl t
                      where t.ship_status = 'Not Shipped'
                  `;
                 pool.query(sql, (err, results) => {
                   if(err){
                      reject(err);
                   }
                   resolve(results);

                const str = JSON.stringify(results);
                const json = JSON.parse(str);

                const promises = [];
                for (let p = 0; p < results.length; p++){
                   const book_id = json[p].bookid;
                   const query = `mutation updateShipping
                                  {updateShipping
                                   (id: ${book_id}, input:{
                                      status: "Shipped"
                                   })
                                   { bookid
                                     bookname }}`
                    promises.push(apolloFetch({ query }));
               }

              //I need an await function so that previous apolloFetch  
              //goes in sequence of bookid, one after the other

              Promise.all( promises ).then(( result) => {
                      errorLogger(27, 'Error', result);
                      })
                     .catch(( e ) => {
                         errorLogger( 29, 'Error', e );
                     )};
                      });
                });
            }
          };

       module.exports = {
              QryAllBooks,
              BookType
       };
const qryalbook={
类型:新图形列表(BookType),
args:{},
解决(){
返回新承诺((解决、拒绝)=>{
设sql=singleLineString`
选择不同的t.bookid、t.bookname、t.country
从书本上
其中t.ship_status='未装运'
`;
查询(sql,(错误,结果)=>{
如果(错误){
拒绝(错误);
}
决心(结果);
const str=JSON.stringify(结果);
const json=json.parse(str);
常量承诺=[];
for(设p=0;p{
错误记录器(27,‘错误’,结果);
})
.catch((e)=>{
错误记录器(29,‘错误’,e);
)};
});
});
}
};
module.exports={
QryalBooks,
书型
};
避免-在调用承诺执行者内部的
解析
后,您不应该做任何事情。将所有这些内容放入
中,然后在
新承诺上回调

resolve() {
    return new Promise((resolve, reject) => {
        let sql = singleLineString`
            select distinct t.bookid,t.bookname,t.country
            from books_tbl t
            where t.ship_status = 'Not Shipped'
        `;
        pool.query(sql, (err, results) => {
            if(err) reject(err);
            else resolve(results);
        });
    }).then(results => {
        const str = JSON.stringify(results);
        const json = JSON.parse(str);

        const promises = [];
        for (let p = 0; p < results.length; p++){
            const book_id = json[p].bookid;
            const query = `mutation updateShipping {
                updateShipping(id: ${book_id}, input:{
                    status: "Shipped"
                }) { bookid
                     bookname }
                }`;
            promises.push(apolloFetch({ query }));
        }
        return Promise.all(promises);
    }).then(result => {
        errorLogger(27, 'Result', result);
        return result;
    }, err => {
        errorLogger(29, 'Error', err);
        throw err;
    )};
}

异步解析(){
const results=等待新承诺((解决、拒绝)=>{
//                  ^^^^^
设sql=singleLineString`
选择不同的t.bookid、t.bookname、t.country
从书本上
其中t.ship_status='未装运'
`;
查询(sql,(错误,结果)=>{
如果(错误)拒绝(错误);
其他决议(结果);
});
});
常量fetches=[];
for(设p=0;p
避免-在调用
resolve
后,您不应该在承诺执行者内部执行任何操作。将所有这些内容放入
中,然后
回调
新承诺
!“但是我不确定我是否缺少使用wait来正常工作:“代码没有缺少
wait
,因为
resolve
不是
async
函数。代码缺少
.catch()
链接到
.then()
以处理错误。Bergi/guest271314-我的错误再次出现-在尝试键入所有我在活动、工作函数中缺少的catch块时。我很难理解将wait与promise一起使用的概念,因此所有bookid都是按顺序执行的,而不是让promise处理这一部分。我如何添加wait以确保它们(bookid)都是按顺序执行的呢?Bergi——我不明白——我需要将所有功能包装到qryalbook中;还有-代码的第三块是否替换了第二块?我很困惑。这三个片段基本上做了相同的事情。(好的,我省略了后两个中奇怪的日志记录)Bergi-好的,我现在知道了-但是等待呢?我不需要它来确保按顺序拨打电话吗?我的意思是-我如何适应这个代码?(在修改后的代码中)后两个代码段已经使用了
wait
。(顺便说一句,
然后
也确保了排序)我的错误-抱歉!将尝试此功能,并很快更新!
async resolve() {
   try {
        const results = await new Promise((resolve, reject) => {
//                      ^^^^^
            let sql = singleLineString`
                select distinct t.bookid,t.bookname,t.country
                from books_tbl t
                where t.ship_status = 'Not Shipped'
            `;
            pool.query(sql, (err, results) => {
                if(err) reject(err);
                else resolve(results);
            });
        });
        const promises = results.map(res => {
            const book_id = res.bookid;
            const query = `mutation updateShipping {
                updateShipping(id: ${book_id}, input:{
                    status: "Shipped"
                }) { bookid
                     bookname }
                }`;
            return apolloFetch({ query });
        });
        const result = await Promise.all(promises);
//                     ^^^^^
        errorLogger(27, 'Result', result);
        return result;
    } catch(err) {
        errorLogger(29, 'Error', err);
        throw err;
    }
}
async resolve() {
    const results = await new Promise((resolve, reject) => {
//                  ^^^^^
        let sql = singleLineString`
            select distinct t.bookid,t.bookname,t.country
            from books_tbl t
            where t.ship_status = 'Not Shipped'
        `;
        pool.query(sql, (err, results) => {
            if(err) reject(err);
            else resolve(results);
        });
    });
    const fetches = [];
    for (let p = 0; p < results.length; p++){
        const book_id = results[p].bookid;
        const query = `mutation updateShipping {
            updateShipping(id: ${book_id}, input:{
                status: "Shipped"
            }) { bookid
                 bookname }
            }`;
        fetches.push(await apolloFetch({ query }));
//                   ^^^^^
    }
    return fetches;
}